根据登录凭据更改 Bash 提示中显示的主机名

根据登录凭据更改 Bash 提示中显示的主机名

我在一台服务器上托管多个域名。

我希望能够更改 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_configsudo 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 时,就会显示用户名和主机名。

相关内容