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

    如何在iterm2中设置自动远程登录(附跳板机攻略)

    admin发表于 2016-12-05 06:14:43
    love 0

    转载自:http://blog.csdn.net/ofengyajie/article/details/17840751
    最近在mac中折腾ssh自动登录的问题,不自动登录每次输入命令太痛苦了,采取的方案是expect脚本的方式,其实选择这种方案而不是在远程服务器上保存key的方式主要是因为公司限制了在跳板机上保存私有数据的权限,如果想了解如何不输入密码登录远程机器的原理,请看这篇博客

    当然,OS X上的终端可以使用iterm2,这样配置后便利性不比$99的secureCRT差
    首先介绍下不通过跳板机进行登录的方式,准备:
    1. 写一个expect脚本

    #!/usr/bin/expect  
     
    set timeout 30  
    spawn ssh [lindex $argv 0]@[lindex $argv 1]  
    expect {  
            "(yes/no)?"  
            {send "yes\n";exp_continue}  
            "password:"  
            {send "[lindex $argv 2]\n"}  
    }  
    interact

    该脚本比较简单,需要三个参数,第一个参数是远程用户名,第二个参数是远程地址,第三个参数是密码
    2. 将expect脚本copy到$PATH下(例如/usr/local/bin)
    3. 在iterm2中设置登录命令为1中的脚本,用command+o的方式呼出profiles,点击Edit Profiles
    20140104132211109
    上面是已配置的远程登录机列表,双击可以自动登录

    如上图配好后,即可自动登录

    下面再说下有跳板机的情况
    俺公司的跳板机策略如下,不同公司的环境不一样,也许某些同学可以进行参考
    1.跳板机上不能存放任何文件,/tmp下可以方临时文件,每天会定时清掉
    2.copy文件方向只能是local->跳板机->remote的方向,即local可以push/pull跳板机上的文件,跳板机可以push/pull远程上的文件
    3.向跳板机登录前需要通过邮件/短信的方式获取passcode,这是除密码之外的额外的验证方式
    其实跳板机的自动远程登录与非跳板机的差异在expect脚本的编写上,其他的照搬即可,那这里就直接把代码贴出来就行了

    #!/usr/bin/expect  
     
     
    # 参数1:远程host;参数2:远程password    
    if { $argc != 2 } {  
        send_user "Usage: host password\n"  
        exit  
    }  
     
    set host [lindex $argv 0]  
    set pw [lindex $argv 1]  
     
    set TERMSERV yourjumpserver # 跳板机服务器  
    set USER jumpserveruser # 用户名  
    set PASSWORD jumperserverpasswd # 跳板机密码  
     
     
    set fd [open /place/to/passcode r] # 本地存放passcode的地方  
    gets $fd pc  
    close $fd  
     
     
    # Start the session  
    catch {spawn ssh -l $USER $TERMSERV} # 登录跳板机  
     
    # Login  
    expect "*assword:*" { send "$PASSWORD\r" }  
    expect "*passcode:*" { send "$pc\r" }   
     
     
    #通过跳板机登录线上机器  
    expect "*hostname*" { send "ssh -l $USER $host\r" } # hostname为你跳板机的名字  
    expect {  
        "(yes/no)?"  
        {send "yes\n";exp_continue}  
        "*assword:*"  
        {send "$pw\n"}  
    }  
    expect "*$host*" { send "cd ~\r"; interact }
    您可能也喜欢:
    thinkphp设置404页面
    发现自我2
    2 PHP面试题/笔试题汇总(删除了一些我会写的题目)
    使用curl模拟post多数据到远程服务器
    无觅


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