Windows下面的有几个比较好的虚拟终端,比如对个人免费的XShell和收费的SecureCRT,如果平时有很多机器需要ssh远程操作,使用这些工具是很方便的(Putty很小巧,但功能相对较若)。但Linux平台下,我没找到类似的工具。虽说有原生的ssh命令,但如果有大量的主机需要登录,还是有些捉襟见肘。然后,脚本就又来拯救世界了。
脚本很简单,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #! /bin/bash declare -A HOSTS HOSTS[devel]="10.232.35.40" HOSTS[test]="10.232.36.200" USER="dutor" PS3="host to connect> " select i in "${!HOSTS[@]}" do ssh $USER@${HOSTS[$i]} break; done |
脚本中用到两个bash“不太常用”的特性,关联数组和select菜单。select可以向用户提供一个菜单试的交互界面,语法结构类似于for。关联数组只是一种特殊的数组,这里有一个简单实用的总结。
关于ssh还有两点需要说明一下。若想登录时免去输入密码,只需要在目标主机上相应用户的~/.ssh/authorized_keys中追加本地主机的公共密钥即可。另外,如果出现登录速度极慢的情况,抛开网络原因,可能是因为目标主机sshd的反向域名解析(由IP查找域名)导致的。反向域名解析可能是出于安全的考虑,但我也没有深究。很多人给出的解决方法是在目标主机上面修改sshd的配置文件/etc/sshd_config,但这对于我来说有些不切实际(大部分主机是很多用户共享的,而且我也不负责主机维护)。试验发现,在本地的~/.ssh/config文件中加入GSSAPIAuthentication no也可以解决这个问题。
最后,使用这个脚本的使用大概是这个样子滴,
1 2 3 4 5 6 7 | local~$ ./mysh.sh 1) devel 2) test host to connect> 1 Password: # here are login messages remote~$ |