从终端使用ssh时如何识别您在哪个服务器上?
我必须每天将ssh放入30台服务器,并不断在它们之间切换。
目前,我正在编辑选项卡名称,并编写IP iddress从一个跳转到另一个。
是否有自动的方法(将服务器IP地址分配为选项卡名称)?还有其他选择,而不必在每个服务器上编辑文件吗?
user@hostname
在连接的第一台主机上。我想查看IP地址。另外,如果我从跳转server1
到server2
的标签不改变名称。
从终端使用ssh时如何识别您在哪个服务器上?
我必须每天将ssh放入30台服务器,并不断在它们之间切换。
目前,我正在编辑选项卡名称,并编写IP iddress从一个跳转到另一个。
是否有自动的方法(将服务器IP地址分配为选项卡名称)?还有其他选择,而不必在每个服务器上编辑文件吗?
user@hostname
在连接的第一台主机上。我想查看IP地址。另外,如果我从跳转server1
到server2
的标签不改变名称。
Answers:
我通常使用通过设置的主机名$PS1
。但是,如果您遇到麻烦,则可以开始使用GNU screen
,然后可以定义如下函数:
function ssh-title () {
host="${@: -1}" # You could customize it to make it identify the hostname better
IP=$(host "$host" | awk '/has address/ { print $4 }')
echo -ne '\033]0;'"$host"' - '"$IP"'\007'
screen ssh "$@"
}
说明:
screen
不会直接让远程外壳程序执行此操作,因此您必须对其进行自定义以使其能够执行此操作,从而使您更容易在本地设置标题并坚持使用。echo
字符串。您可能也必须这样做。screen
通过ssh
命令启动会话。当命令退出时,会话结束。您可以通过多种方式自定义。例如,您可以将主机名和IP保存在文件中并从文件中读取(有点像ssh_config
)(也可以保存标题的其他内容,例如用户名)。
现在使用ssh-title some.host
连接。我认为这是无需编辑任何服务器端即可完成此操作的唯一方法。
另一种选择是使用liquidprompt ---既适用于bash
和zsh
,并且能够容易地配置为具有终端标题集,甚至在不同的颜色在提示主机名的颜色:
该解决方案有些破绽,但是我认为它可以满足您的需求。您需要为此进行安装xdotool
并进行wmctrl
安装。
首先,您必须编辑~/.bashrc
文件,因为默认情况下,终端会在每行之后重置其标题,从而使命令行标题集无用。
之后: xterm*|rxvt*)
更换: PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
带有: PS1="${debian_chroot:+($debian_chroot)}\u@\h \w\a$ "
接下来,我们将创建一个自定义ssh
脚本,该脚本名为您想要的任何名称,但是对于此答案,我将称为mine tab-ssh
。打开文本编辑器,并将以下内容另存为tab-ssh
:
#!/usr/bin/env bash
WID=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}')
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID
sleep 1
title=$(echo "$*" | sed s/.*@//g)
xdotool type --delay 1 --clearmodifiers 'echo -en "\033]0;"'"${title}"'"\a"'
xdotool key Return
sleep 1
xdotool type --delay 1 --clearmodifiers "ssh $*"
xdotool key Return
然后使其可执行:
chmod +x tab-ssh
现在,假设您正在使用bash
和gnome-terminal
,则运行脚本应该打开一个新标签页,对其进行重命名并开始ssh
会话。例如:
tab-ssh username@0.0.0.0
将打开一个新标签,将其重命名为0.0.0.0
(即“ @”符号后的所有内容),然后执行username@0.0.0.0
。
使用以下内容创建: