expect实现ssh自动登录

Posted WSYW126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了expect实现ssh自动登录相关的知识,希望对你有一定的参考价值。

每次登陆服务器,都要输入账户密码,一般我们可以配置免密登陆。比如:将本地id_rsa.pub文件的内容,配置到远程服务器的~/.ssh/authorized_keys文件,具体的步骤可以参考网上其他教程。

但是有时候由于一些限制要求,不能配置免密登陆,每次使用ssh username@hostIp再输入密码的方式太耗时,想要进行密码自动填充。

懒是一种生产力。

解决方法:使用expect在ssh_login.sh脚本中封装expect的ssh登录自动填充密码功能。

需要安装的软件:

  1. Mac安装expect:brew install expect
  2. LUIT

    平时在工作中经常连接Linux/Unix服务器,有的服务器是UTF-8,有的服务器是GBK。在Windows下SecureCRT可以完美解决这个问题,在Mac下要通过修改配置进行切换,比较麻烦。
    下面隆重介绍一款Terminal下输出转码的工具——LUIT支持Mac、Linux原生的Terminal。
      •  下载地址
            http://invisible-island.net/luit/luit.html#download 
      •  解压
            tar zxvf luit.tar.gz
            cd luit-20141204  //可能版本会不一样
      •  配置
            ./configure
      •  编译
            make
      •  安装
            make install
      •  卸载
            make uninstall
      •  使用
            luit -encoding gbk ssh user@host

脚本:
起个名字:ssh_login.sh

#!/usr/bin/expect
set host [lindex $argv 0 ]
if $host != "" 
    spawn luit -encoding gbk ssh admin@$host
    expect 
        "(yes/no)?" 
            send "yes\\n"
            expect "password:" send "密码\\n"
        
        "password:" send "密码\\n"


    
    interact
 else 
    puts stdout "Please enter the target host.";

完成上面的步骤之后,就可以在ssh_login.sh的目录下执行:./ssh_login.sh hostIp,登录服务器了。

如果安装了iterm2,可以再~/.zshrc中配置alias login='~/你的目录路径/ssh_login.sh',之后就可以在任何地方,通过login hostIp登录了。


参考资料:
网络资料
备注:
转载请注明出处:http://blog.csdn.net/wsyw126/article/details/80140079
作者:WSYW126

以上是关于expect实现ssh自动登录的主要内容,如果未能解决你的问题,请参考以下文章

实现ssh 自动登录

expect实现ssh自动登录

ssh采用expect实现自动输入密码登录拷贝

shell脚本实现ssh自动登录远程服务器示例

expect实现自动scp和ssh登录后执行命令,并向bash提供返回值

linux中使用expect实现自动登录