【问题标题】:some commands not wroking on remote servers through ssh (shell)某些命令无法通过 ssh (shell) 在远程服务器上运行
【发布时间】:2013-11-14 16:58:33
【问题描述】:

我必须在远程服务器上运行一些用户定义的命令。所以我做了以下。它适用于许多命令,例如crontab -llsdate +%s 等...但是,它不适用于ip addr

当我真正在那些服务器ip addr 内进行 ssh 时工作正常。但是当我使用 ssh 执行它时,它不会。

这就是我执行它的方式。

$ sshpass -p myPassword ssh -q root@127.0.0.1 'ip addr' > $PWD/tmp
$ cat $PWD/tmp

同样,这适用于我迄今为止尝试过的任何命令,ip addr 除外。 对于ip addr,它给出以下输出

bash: ip: command not found

所以我想知道为什么以及我在做错什么......

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

提前谢谢你

【问题讨论】:

    标签: linux bash shell ssh


    【解决方案1】:

    这是因为非交互式 ssh 会话没有获取您的登录配置文件,其中包括设置您的 PATH 变量。

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

    【讨论】:

    • 我明白了...所以你告诉我,当我通过 ssh 运行命令时,它的访问权限有点“受限”?另外,有没有办法解决这个问题?或者它真的取决于我想通过 ssh 运行的命令。
    • 并不是说它的访问权限有限,而是因为您以非交互方式运行,您可能需要自己做一些工作。在 ip 命令出现问题的情况下,您可以调用命令PATH=/sbin:/usr/sbin:$PATH ip addr,这应该可以解决这种情况下的问题。通过 ssh 执行多个命令可能会更好地通过使用 scp 远程复制它,然后通过 ssh 调用它来完成。这样,您可以添加一行设置 PATH 到脚本,因此只执行一次。
    • 好的,我明白了。因为我不知道用户想要执行什么,我可以在每个命令前加上PATH=/sbin:/usr/sbin:$PATH 吗?假设用户命令存储在$myCommand 中。我会简单地做sshpass -p mypass ssh root@127.0.0.1 'PATH=/sbin:/usr/sbin:$PATH $myCommand'
    • 并且还为 ALL 命令加上PATH=/sbin:/usr/sbin:$PATH 不会影响其他任何东西?
    • 除非您在/sbin/usr/sbin 中有额外的命令变体,否则最坏的影响将是命令的额外搜索时间。
    猜你喜欢
    • 2020-10-30
    • 2021-09-04
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    相关资源
    最近更新 更多