确定我正在使用的服务器
如何识别从终端使用ssh时你所使用的服务器?
我必须每天ssh到30台服务器,并不断切换它们。
目前我正在编辑选项卡名称并编写IP iddress以从一个跳转到另一个。
是否有自动执行此操作的方法(将服务器IP地址指定为选项卡名称)? 任何其他不涉及在每台服务器上编辑文件的替代方案?
我通常使用主机名,通过$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 "$@" }
说明:
- 即使您从本地shell设置标题,它也可能被远程shell设置覆盖。
screen
不直接让远程shell执行此操作,您必须自定义它以允许它这样做,使您更容易在本地设置标题并坚持下去。 - 从主机名中查找IP ,同时将最后一个参数视为主机名,并将其设置为标题。 在得到正确的
echo
串之前,我不得不做一些试验 和 错误 。 你可能也必须这样做。 - 最后,使用
screen
使用ssh
命令启动会话。 当命令退出时,会话结束。
您可以通过各种方式自定义它。 例如,您可以将主机名和IP保存在文件中并从中读取(有点像ssh_config
)(并且可能保存标题的其他内容,如用户名)。
现在使用ssh-title some.host
进行连接。 我认为这是唯一可以在不编辑任何服务器端的情况下执行此操作的方法。
一些识别服务器的方法:
- SSH指纹 – 安全,但每次重新部署时都会更改。
- Shell提示符(
PS1
)和终端标题 – 不安全(任何人都可以复制它)但简单实用。 -
ip address
– 使用SSH指纹保护,更易于阅读。 -
hostname
– 不安全但非常易读。
另一种选择是使用liquidprompt —适用于bash
和zsh
,并且可以轻松配置为设置终端标题,甚至可以在提示中使用不同颜色的主机名颜色:
这个解决方案有点hackish,但我认为它会做你想要的。 您需要安装xdotool
和wmctrl
才能工作。
首先你必须编辑你的~/.bashrc
文件,因为默认情况下终端在每一行之后重置它的标题,渲染命令行标题集是无用的。
xterm*|rxvt*)
: xterm*|rxvt*)
替换: PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
使用: PS1="${debian_chroot:+($debian_chroot)}\u@\h \w\a$ "
接下来我们将创建一个自定义的ssh
脚本,无论你想要什么,但对于这个答案,我将调用我的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
。
使用以下内容创建:
- AskUbuntu:在gnome-terminal中设置标题
- StackOverflow:在gnome-terminal中打开一个新选项卡
- StackOverflow:bash中的单引号和变量扩展