通过 ssh 推送我的 PS1 提示

Unf*_*nut 19 linux ssh bash prompt

我使用我喜欢的特定“PS1”提示。我在几个不同的服务器上与其他人共享一些登录信息。我想知道是否有一种方法可以在我的本地 bash 配置文件中指定远程提示,或者在每次远程进入时复制和粘贴之外的任何其他方式。

cYr*_*rus 18

在每台远程机器上上传一个文件,比如~/.my_custom_bashrc,使用您的自定义bash配置,(在这种情况下PS1=...)然后启动ssh

ssh user@host -t "bash --rcfile ~/.my_custom_bashrc -i"
Run Code Online (Sandbox Code Playgroud)

您可以轻松地将bash函数用作包装器以提高可读性。


Gil*_*il' 10

如果您只想发送PS1变量,并且它不包含'(单引号),请尝试:

ssh targethost -t "PS1='$PS1'; exec bash"
Run Code Online (Sandbox Code Playgroud)

本地.bashrc可能会覆盖PS1(感谢丹尼斯威廉姆森指出这一点)。

有一些方法可以通过 ssh 传输环境变量,但它们通常在服务器配置中被禁用。如果PermitUserEnvironment服务器配置中启用了该指令并且每个用户都有自己的密钥对(是的,您可能没有那么幸运),您可以添加environment="PS1=…"~/.ssh/authorized_keys与您的密钥相对应的行中。

如果您想在共享用户帐户上保留自己的配置,您可以创建自己的配置文件目录并将HOME环境变量设置为指向该目录。

ssh targethost mkdir mrstatic.home
scp .bashrc targethost:mrstatic.home/
Run Code Online (Sandbox Code Playgroud)

mrstatic.home当您想与其他用户共享文件时,在目录中创建指向父目录中相应条目的符号链接。

然后,登录

ssh targethost -t 'HOME=~/mrstatic.home; exec bash'`
Run Code Online (Sandbox Code Playgroud)

如果您愿意修改遥控器.profile(或其他初始化文件),您可以自动设置。许多站点允许LC_*环境变量通过(通常它们用于区域设置)。如果这两个条件都满足,您可以设置一个实际上不用于语言环境的变量,例如LC_USER,在客户端,并在服务器中测试它.profile

(当然共享帐户是一个坏主意,但我意识到您可能无法改变这种情况。)