我在一台服务器上托pipe多个域。
我希望能够在我的bash提示符中更改显示的主机名,以指示在ssh进入服务器时select哪一个。
我的提示如下:
\u@\h
这显示为:
user@hostname
我将如何更改\h显示我login哪个域(blah.net,hmm.com等)?
事实certificate, ssh通过string匹配在ssh_config(5)find了行,所以如果所有的IP都相同的话就可以。
你想要什么,是的
.ssh/config不同行,使用HostName给ssh作为真实的主机域名 .ssh/config每一行都使用SendEnv发送一个不同的variables,参见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 *
你的域名都有不同的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文件来获取更改。 希望它有助于某人:-)