加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么ssh远程命令的$PATH与交互式shell的$PATH不同?

发布时间:2020-12-15 18:42:25 所属栏目:安全 来源:网络整理
导读:我有一个用户没有修改任何点文件中的$PATH:它正是系统默认设置.从登录 shell: $ssh example.comuser@example.com:~$cat /tmp/hello.hs#!/bin/bashecho "$SHELL"echo "$PATH"user@example.com:~$/tmp/hello.hs/bin/bash/usr/local/bin:/usr/bin:/bin 正如/
我有一个用户没有修改任何点文件中的$PATH:它正是系统默认设置.从登录 shell:
$ssh example.com
user@example.com:~$cat /tmp/hello.hs
#!/bin/bash

echo "$SHELL"
echo "$PATH"

user@example.com:~$/tmp/hello.hs
/bin/bash
/usr/local/bin:/usr/bin:/bin

正如/ etc / profile中指定的那样.我觉得这很意外:

$ssh example.com '/tmp/hello.sh'
/bin/bash       
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

就像我说的那样,?/ .bashrc中没有修改$PATH,也没有修改/etc/bash.bashrc中的$PATH.没有?/ .ssh /环境. ssh(1)声明环境变量PATH是

Set to the default PATH,as specified when compiling ssh.

但是来自StackOverflow的this thread和这篇mailing list文章建议我应该能够通过修改/ etc / profile,shell启动文件之一等来影响给定命令的$PATH.

这里发生了什么?

从ssh(1)手册页:“如果指定了命令,它将在远程主机而不是登录shell上执行.”

因此,当您实际登录到计算机时,bash作为登录shell启动并加载适当的文件,当您远程连接并发出命令时,它将在bash的位置运行,这意味着这些文件不会加载.你可以在ssh的命令部分使用su -l -c或类似的方法解决它.

在某些情况下,我也看到了-sh参数ssh work(allocate tty).

编辑1:
我认为您找到的PATH信息,默认路径(除非我们覆盖它)是编译成sshd的路径.我确保我的/ etc / profile,/ etc / bash *,本地dotfiles等没有任何PATH信息,然后我登录并仍然有一个PATH.我在sshd搜索了这个,并在那里找到了它.所以它的手册如何说:

ahnberg@remote$strings /usr/sbin/sshd | grep -i x11 | grep bin
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

然后我将PATH = $PATH:/ my / test添加到远程我的.bashrc文件的最顶层,然后再次检查:

ahnberg@local$ssh ahnberg@remote "env | grep PATH"
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/my/test

所以我绝对可以影响它,默认PATH是编译成sshd的那个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读