IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    一个管理ssh的脚本

    dutor发表于 2012-02-19 12:50:34
    love 0

      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~$


沪ICP备19023445号-2号
友情链接