启动firewalld.service VIA ssh

当我们在远程机器上configuration和启动防火墙时,我们有非常奇怪的问题

当我们运行VIA ssh的以下命令(来自bash脚本)时,

脚本示例:

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开关,这样做会有所不同。