Answers:
您几乎没有什么可能:
PATH
在服务器上将设置为~/.ssh/environment
(需要通过PermitUserEnvironment yes
in 启用sshd_config
)。.bashrc
:在命令前加上. ~/.bashrc
(或source
)这在很大程度上取决于用例,您将采用哪种方式。
~/.bashrc
不是必需的,默认情况下会发生。事实上,在我看来,这是个坏主意。
$PATH
不会从扩展~/.ssh/environment
,至少不会在扩展OpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019
。
PermitUserEnvironment
(最新版本中为默认设置)
PATH="$PATH:/new/path"
到我~/.ssh/environment
时,它应该是PATH=$PATH:/new/path
您将本地设置等同于远程设置。
在本地,一个bash实例,您正在其中编写的当前正在运行的shell:
ssh user@host command
将作为客户端ssh执行命令ssh(仅此而已)。
为此,本地外壳无需启动子外壳或新外壳或登录。
该命令作为以下ls
命令执行:在本地。
客户端ssh命令打开了到远程系统的网络连接,在该系统中,如果正确通过身份验证,将启动新的 Shell以执行作为ssh的参数写的命令,或者,如果未给出参数,则需要其他命令在那个连接上。
由于需要验证远程用户(该系统的用户)才能登录,所以新的Remote Shell必然是登录Shell。或者,如果给出了一些特定的命令,则只需以经过身份验证的用户权限运行该命令。
您可以通过$file sourced
在每个文件的开头(在远程系统中)添加a 来查看源文件(更改/etc/
文件需要root ):
$ a=(~/.bashrc ~/.profile /etc/bash.bashrc /etc/profile)
$ for f in "${a[@]}"; do sed -i '1 i\echo "'"$f"' was read"\n' "$f"; done
然后只需启动一个ssh控制台即可:
$ ssh sorontar@localhost
/etc/profile was read
/etc/bash.bashrc was read
/home/sorontar/.profile was read
/home/sorontar/.bashrc was read
在这种情况下,bashrc
读取这两个文件是因为每个profile
文件都有包含它们的命令,而不是因为登录外壳程序直接将它们作为源。
$ ssh sorontar@localhost :
/etc/bash.bashrc was read
/home/sorontar/.bashrc was read
在此系统中,bashrc
两种情况下都在哪里读取。
无需source ~/.bashrc
在命令中添加a 即可执行。
您需要做的就是/etc/bash.bashrc
为在该系统中启动Shell的所有用户添加更改“ $ PATH”的正确设置。或~/.bashrc
针对每个需要它的用户。您可以添加(或编辑)用户的骨架,.bashrc
以/etc/skel/
使创建的任何新用户都具有正确的文件。
以上仅对bash有效。如果需要使该设置适用于所有shell,则可以使用ssh文件~/.ssh/environment
为每个需要它的用户设置环境变量PATH 。或/etc/ssh/sshrc
用于运行ssh服务器的系统中的全局设置(请阅读中的“文件”部分以man sshd
获取其他详细信息)。
.bashrc
来源,但顶部可能会进行交互性测试。您在该检查之前输入的内容应该适用,这就是我在服务器不允许用户环境或使用时强制执行PATH的操作~/.pam_environment
。