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

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

我知道如何将 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

图中:

在此输入图像描述

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

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

答案1

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

如果您不想更改文件,并且确实必须使用该共享帐户(插入有关共享帐户的强制性抱怨),并且您通过 ssh 登录,则可以(ab)command=使用~/.ssh/authorized_keys文件。带有命令选项的按键仅适用于运行指定的命令;但authorized_keys 文件中的命令运行时环境变量SSH_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…== [email protected]

请注意,为了便于阅读,我在上面添加了换行符,但这实际上需要全部位于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'

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

答案2

当您登录到远程系统时,您将获得一个新的 shell。特别是远程系统上的外壳。为了在不同的计算机上拥有您最喜欢的 shell 首选项,您还必须在该计算机上设置您的首选项。这意味着您必须在远程站点上的 .bashrc 文件中设置提示命令 shell 提示符。是这样设计的。

附带说明一下,当您登录到远程计算机时,远程计算机可能会认为您的终端能力不如您的终端。如果您的 PS1 设置正确,请尝试在安装新计算机时设置您的 TERM 变量。远程计算机通常为所有远程登录假设一个相当愚蠢的终端,但它们通常实际上支持不错的终端,您可以伪造它以使用合理的设置,但强制此环境变量为有能力的东西,例如 xterm-color。

相关内容