有没有办法在通过 SSH 连接到主机时推送 shell 配置信息?

Lan*_*nes 5 shell prompt ssh environment-variables

我知道如何将 GNOME 终端(或 xterms!)关于最后一个退出代码的提示设置为绿色/红色:

vi .bashrc

export PROMPT_COMMAND='PS1="`
if [[ \$? = "0" ]];
then echo "\\[\\033[0;32m\\]";
else echo "\\[\\033[0;31m\\]";
fi`[\u@\h \w]\[\e[m\] "'

export PS1
Run Code Online (Sandbox Code Playgroud)

图片中:

在此处输入图片说明

但是如果我登录到远程服务器,那么这些颜色设置就不起作用了!

我怎样才能将它设置为在远程终端上工作?不幸的是,我无法将上述行附加到远程服务器.bashrc。

Gil*_*il' 6

您正在尝试更改远程 shell 显示的提示。这当然需要更改远程shell的配置文件,即.bashrc.

如果您不想更改文件,并且您确实必须使用该共享帐户(插入有关共享帐户的强制性抱怨),并且您通过 ssh 登录,则可以 (ab) 使用文件中的command=选项。带有命令选项的键仅适用于运行指定的命令;但是authorized_keys 文件中的命令运行时环境变量设置为用户指定的命令(交互式会话为空)。所以你可以使用这样的东西:~/.ssh/authorized_keysSSH_ORIGINAL_COMMAND~/.ssh/authorized_keys

command="HOME=$HOME/.HOME.lance;
         if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then
           eval \"$SSH_ORIGINAL_COMMAND\";
         else exec \"$SHELL\"; fi" ssh-rsa AAAA…== lance@example.com
Run Code Online (Sandbox Code Playgroud)

请注意,为了便于阅读,我在上面放置了换行符,但这实际上需要在authorized_keys文件中的一行中。

然后将您喜欢的配置文件放在该.HOME.lance目录中。

对于偶尔使用,您可以明确获取配置文件或运行任何 shell 命令。-t如果要运行交互式命令,请传递具有终端的选项。

ssh shared-account@server "LS_COLORS='$LS_COLORS' ls --color"
ssh -t shared-account@server '. ~/.profile.drew; exec zsh'
Run Code Online (Sandbox Code Playgroud)

如果您只想在远程机器上编辑或复制文件,您可以使用网络文件系统,例如SSHFS(适用于 unix 客户端)或Tramp(适用于 Emacs),并在舒适的本地环境中工作。