根据login凭证在bash提示符下更改显示的主机名

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

我希望能够在我的bash提示符中更改显示的主机名,以指示在ssh进入服务器时select哪一个。

我的提示如下:

\u@\h 

这显示为:

 user@hostname 

我将如何更改\h显示我login哪个域(blah.net,hmm.com等)?

事实certificate, ssh通过string匹配在ssh_config(5)find了行,所以如果所有的IP都相同的话就可以。

你想要什么,是的

  • 每个系统的.ssh/config不同行,使用HostNamessh作为真实的主机域名
  • 在您的本地环境中,有三个不同的环境variables,其中有不同的提示
  • .ssh/config每一行都使用SendEnv发送一个不同的variables,参见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 * 

你的域名都有不同的IP吗?

如果是这样,一旦你login,你可以使用variables$ SSH_CONNECTION。

如果没有,那么就不可能区分,所有的服务器看到的都是IP地址,不存在基于名称的ssh之类的东西。

一种方法可以是为本地〜/ .ssh / config中的每个主机名创build条目,configuration为连接到服务器上的不同端口

主持人foo
   HostName www.foo.com
  港口1022 

主持酒吧
HostName http://www.bar.com
港口2022

然后,服务器上的〜/ .bashrc可以parsingSSH_CONNECTION环境variables,并选取连接的端口,并相应地更改提示。

 case $(ruby -e'puts ENV [“SSH_CONNECTION”]。split [-1]')in
   1022)
    虚拟主机提供商= “www.foo.com”
   ;;
   2022)
    虚拟主机提供商= “www.bar.com”
   ;;
   *)
    虚拟主机提供商= “www.foobar.com”
   ;;
 ESAC 

PS1 =“\ n \ u @ $ WEBHOST \ w \ n $?>”

显然你需要在你的path上使用ruby,但你明白我的意思。

您可以使用SendEnv指令(协议2是必需的,远程机器上的sshd必须configuration为AcceptEnv以包含要使用的variables的名称):

在本地机器上:

 export dest=example.com; ssh -o "SendEnv dest" username@$dest 

在远程机器上,在〜/ .bashrc中:

 PS1="...${dest}..." 

椭圆表示提示中的其余部分。

如果你编辑/etc/ssh/sshd_config来添加一个variables,你可能必须发送SIGHUP到sshd

或者,如果您已经在这些域中使用bash,请编辑.bashrc文件以添加该行:

PS1 ='\ u @ \ h:\ w \ $'

所以,当你login和切换到bash的用户名和主机名显示。

你必须做的是在连接到服务器的时候指定带有正确主机名的提示符(PS1)。 假设你在Linux机器上使用ssh客户端,你可以通过运行命令来完成:

 ssh -t username@hostname-001 "export PS1='\u@hostname-001'; bash --login" 

我发现这个技术非常有用,同时pipe理许多服务器的连接,而没有正确的主机名设置(如EC2亚马逊默认主机名)。 我写了一个小的bash帮助函数,使用了bash别名,并把它放在.bashrc文件中。

 function __ssh_helper { local user=$1 local host=$2 local txtgrn='\e[0;32m' local txtblu='\e[0;34m' local txtcyn='\e[0;36m' local txtrst='\e[0m' ssh -t ${user}@${host} "export PS1='[${txtcyn}\u${txtrst}@${txtgrn}${host}${txtrst} \W]\$ '; bash --login" } alias hostname-001.prod='__ssh_helper username hostname-001.prod' alias hostname-002.prod='__ssh_helper username hostname-002.prod' 

我用/ etc / hosts文件指向hostname-00(1 | 2).prod到ip地址。 简单地添加新的SSH连接:1.将主机名添加到/ etc / hosts文件; 2.给.bashrc添加一个别名; 3.通过采购.bashrc文件来获取更改。 希望它有助于某人:-)