我使用我喜欢的特定“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 服务器。在下面的示例中,我们恢复PS1
和PS2
。
如果您想向服务器发送更多变量,只需添加它们的名称没有之后。$
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)"))"
此命令设置给定的变量(此处PS1
和PS2
)后原始 rc 文件来自服务器(您可能需要调整此列表,例如通过添加~/.profile
)。因此,您最终会从服务器获得常用环境(如果服务器上的默认 shell 是 bash)和来自客户端的给定变量(这些变量可能会覆盖由server
rc 文件设置的变量)。
- 不需要
scp
或需要临时文件。 - 对于要推送的变量的内容没有任何限制。
- 对ssh服务器设置没有特殊要求。