2013-11-14 141 views
2

我必须在远程服务器上运行一些用户定义的命令。所以我做了以下。它适用于许多命令,如crontab -llsdate +%s,等等......不过,它不为ip addr某些命令不能通过ssh在远程服务器上运行(shell)

工作时,我居然SSH INSIDE ip addr正常工作的服务器。但是当我使用ssh执行它时,它没有。

这是我如何执行它。

$ sshpass -p myPassword ssh -q [email protected] 'ip addr' > $PWD/tmp 
$ cat $PWD/tmp 

同样,这适用于到目前为止除了ip addr我试过的任何命令。 对于ip addr它提供了以下输出

bash: ip: command not found 

所以我想知道为什么,如果有什么不对我做....

而且,请不要sugges使用rsync或其他任何非默认的linux命令,因为我工作的环境没有它们,我也没有安装权限。

预先感谢您

回答

2

这是因为非交互式SSH会话不会源的登录配置,其中除其他事情是设置你的PATH变量引起的。

默认路径不包含/sbin,这是ip命令的常用位置。

+0

我明白了......所以你告诉我,当我通过ssh运行命令时,它具有“有限”访问权限?另外,有没有办法解决这个问题?或者它真的取决于我想通过ssh运行的命令。 – Masster

+1

这并不是说它具有有限的访问权限,而是因为你以非交互方式运行,你可能需要自己做一些工作。在ip命令出现问题的情况下,可以使用命令调用PATH =/sbin:/ usr/sbin:$ PATH ip addr来解决这种情况。通过ssh远程复制它,然后通过ssh调用它,可以更好地完成对ssh的多个命令。这样你就可以添加一行设置PATH到脚本,因此只执行一次。 – Petesh

+0

好吧,我明白了。因为我不知道用户想要执行什么操作,所以我可以在每个命令之前放置PATH =/sbin:/ usr/sbin:$ PATH?假设用户命令存储在'$ myCommand'中。我会简单地执行'sshpass -p mypass ssh [email protected]'PATH =/sbin:/ usr/sbin:$ PATH $ myCommand'' – Masster

相关问题