我在一台服务器上托管多个域名。
我希望能够更改 bash 提示符中显示的主机名,以指示我在 ssh 进入服务器时选择了哪一个。
我的提示如下:
\u@\h
显示为:
user@hostname
我该如何更改\h
以显示我已登录的域名(blah.net、hmm.com 等)?
答案1
原来是通过字符串匹配ssh
来找到行的ssh_config(5)
,所以只要所有的IP都相同就可以了。
那么你想要的是
.ssh/config
每个系统有不同的行,用于HostName
提供ssh
真正的主机域名- 在您的本地环境中拥有三个不同的环境变量,其中包含不同的提示符
- 让每一行
.ssh/config
使用发送不同的变量SendEnv
,请参阅man ssh_config
。 - 用这三个来制作提示(两个始终为空)
- 输入
AcceptEnv *
和/etc/ssh/sshd_config
(sudo kill -1 $(cat /var/run/sshd.pid)
也AcceptEnv E1 E2 E3
应该可以工作。)
例子。
客户.ssh/config
Host barb
HostName deb
SendEnv BARB
Host jane
HostName deb
SendEnv JANE
Host deb barb jane
Protocol 2
ForwardAgent yes
Compression no
服务器.bashrc
PS1='$BARB$JANE.otherstuff...'
服务器/etc/ssh/sshd_config
...
AcceptEnv *
答案2
你们的域名都有不同的 IP 吗?
如果是这样,您可以在登录后使用变量 $SSH_CONNECTION。
如果不是,那么就无法区分,服务器看到的只是 IP 地址,不存在基于名称的 ssh。
答案3
一种方法是将你本地 ~/.ssh/config 中的每个主机名都配置为连接到不同的端口在您的服务器上。
Host foo
HostName www.foo.com
Port 1022
Host bar
HostName www.bar.com
Port 2022
然后,服务器上的 ~/.bashrc 可以解析 SSH_CONNECTION 环境变量并挑选出您连接的端口,并相应地更改提示。
case $(ruby -e 'puts ENV["SSH_CONNECTION"].split[-1]') in 1022) WEBHOST="www.foo.com" ;; 2022) WEBHOST="www.bar.com" ;; *) WEBHOST="www.foobar.com" ;; esac
PS1="\n\u@$WEBHOST \w\n$?> "
显然,你需要在你的路径中使用 ruby,但你明白我的意思。
答案4
或者,如果您已经在这些域上使用 bash,请编辑 .bashrc 文件以添加以下行:
PS1='\u@\h:\w\$ '
这样,当您登录并切换到 bash 时,就会显示用户名和主机名。