当我们在远程机器上configuration和启动防火墙时,我们有非常奇怪的问题
当我们运行VIA ssh的以下命令(来自bash脚本)时,
我们有Redhat 7机器
systemctl启动firewalld.service
脚本示例:
ssh $USER@$IP systemctl enable firewalld.service ssh $USER@$IP systemctl start firewalld.service
那么我们从命令中得到关于超时的消息 – systemctl start firewalld.service
但是当我们在机器上运行 – systemctl start firewalld.service手册
然后我们访问来运行它
那么为什么威盛SSH我们不能运行命令,但本地我们可以运行它?
这里有什么区别?
我手边没有Redhat 7机器,所以我不能显示确切的值。 但:
login时,通常会在交互式会话中为您提供一个丰富的环境。 当然,这取决于你的设置,因为你可以设置任何你想要添加语句到/ etc / profile,$ HOME / .bashrc的环境,还有更多的方法。
相反,只要发出一个远程命令,就会得到一个更小的环境。 有些目录可能不在你的PATH环境variables中,例如
一个简单的方法来看到不同的环境将是以下三个会议:
ssh $USER@$IP env
与
ssh $USER@$IP env exit
您可以从比较PATH值开始,然后尝试在交互式shell上运行命令systemctl enable firewalld.service ,但将PATHvariables更改为非交互式variables之后。
如果这还不给你一个宾果游戏,请完全按照非交互式版本设置交互式会话的整个环境。
ssh host command方式还有另外一个区别:你不会得到一个tty; 你看到这个发出命令tty 。 你的交互式sessiong会回答/dev/pts/3 ,而ssh host tty不会回答not a tty 。 我注意到systemctl依赖于一个tty,甚至不同的行为slightes,但其他命令它envokes可能会这样做。 你可能需要ssh来分配一个tty,像ssh -t $USER@$IP systemctl enable firewalld.service来添加-t开关,这样做会有所不同。