通过 ssh 推送我的 PS1 提示符

通过 ssh 推送我的 PS1 提示符

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

答案1

在每台远程机器上上传一个文件,比如~/.my_custom_bashrc,使用你的自定义bash配置,(在本例中PS1=...)然后启动ssh

ssh user@host -t "bash --rcfile ~/.my_custom_bashrc -i"

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

答案2

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

ssh targethost -t "PS1='$PS1'; exec bash"

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

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

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

ssh targethost mkdir mrstatic.home
scp .bashrc targethost:mrstatic.home/

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

然后,使用以下方式登录

ssh targethost -t 'HOME=~/mrstatic.home; exec bash'`

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

(当然共享账户是个坏主意,但我知道你可能无法改变这种情况。)

答案3

将您的 PS1 提示符放入 ~/.ssh/environment 中,ssh 会话会将其传送到您登录的每个主机。它适用于 openssh 4.3p2 。

答案4

要从服务器上的客户端恢复任意环境变量,请使用以下 bash 命令连接到 ssh 服务器。在下面的示例中,我们恢复PS1PS2
如果您想向服务器发送更多变量,只需添加它们的名称没有之后。$PS2

ssh -t user@server "exec bash --rcfile <(cat /etc/bash.bashrc ~/.bashrc 2> /dev/null; printf '%s\n' $(printf %q "$(declare -p PS1 PS2)"))"

此命令设置给定的变量(此处PS1PS2原始 rc 文件来自服务器(您可能需要调整此列表,例如通过添加~/.profile)。因此,您最终会从服务器获得常用环境(如果服务器上的默认 shell 是 bash)来自客户端的给定变量(这些变量可能会覆盖由serverrc 文件设置的变量)。

  • 不需要scp或需要临时文件。
  • 对于要推送的变量的内容没有任何限制。
  • 对ssh服务器设置没有特殊要求。

相关内容