我有一个用户没有对任何点文件中的 $PATH 进行任何修改:这正是系统默认设置。从登录外壳:
$ 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
Run Code Online (Sandbox Code Playgroud)
完全按照 中的规定/etc/profile。我觉得这很出乎意料:
$ ssh example.com '/tmp/hello.sh'
/bin/bash
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
Run Code Online (Sandbox Code Playgroud)
就像我说的,没有修改 $PATH in ~/.bashrc,也没有修改/etc/bash.bashrc. 也没有~/.ssh/environment。该ssh(1)声明环境变量PATH是
设置为默认 PATH,如编译 ssh 时所指定。
但是来自 StackOverflow 的这个线程和这个邮件列表文章表明,我应该能够通过修改 /etc/profile、shell 启动文件之一等来影响给定命令的 $PATH。
这里发生了什么?
Mat*_*erg 18
来自ssh(1)手册页:“如果指定了命令,它将在远程主机而不是登录 shell 上执行。”
简而言之,当您实际登录到机器时,bash 作为登录 shell 启动并加载适当的文件,当您远程连接并发出命令时,它会在 bash 的位置运行,这意味着这些文件不会加载。您可以su -l -c在 ssh 的命令部分使用 using或 similar 来解决它。
在某些情况下,我也看到-t了 ssh 工作(分配 tty)的争论。
编辑 1:
我认为您找到的 PATH 信息,即默认路径(除非我们覆盖它)是编译成 sshd 的路径。我确保我的 /etc/profile、/etc/bash*、本地点文件等中没有任何 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
Run Code Online (Sandbox Code Playgroud)
然后我添加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
Run Code Online (Sandbox Code Playgroud)
所以我绝对可以影响它,默认PATH是编译成sshd的那个。:)
我能够通过运行以下命令让 ssh 使用远程路径运行命令:
ssh dist@d6 "bash --login -c 'env'"
Run Code Online (Sandbox Code Playgroud)
这里的 env 可以替换为您想要的任何命令。
我已授权密钥,因此不需要密码即可运行命令或 ssh。
| 归档时间: |
|
| 查看次数: |
27874 次 |
| 最近记录: |