使用 expect 脚本实现 SSH 自动登陆服务器

又学了一个小招,使用 expect 脚本语言实现 ssh 自动连接到服务器,可以自动输入密码。因为每次使用 ssh root@xx.xx.xx.xx 连接服务器,都要手动输入一遍密码,有没有办法自动输入密码呢?

在网上搜索了一下,果然有办法,有一种脚本语言 expect ,它的作用就是能与交互式程序进行“可程序化”会话,比如自动输入密码,碰到”password”字符就会自动输入密码。

首先要安装 expect 脚本程序,不过在 Macbook 中自带了。比如 CentOS 的机器,可以使用 yum install expect 的方式安装。

这个简单的小脚本 ali.exp 如下(注意脚本文件格式是 exp ):

#!/usr/bin/expect

spawn ssh root@112.xx.xx.47
expect "password:"

send "A0000223456700\r"

interact

这样一来,把 ali.exp 文件设为可执行的之后,就可以 ./ali.exp 运行脚本,自动就连上服务器了。

spawn 后面就是要执行的 shell 命令,expect 是捕获要等待输入的字符,send 是自动输入的内容,注意要 “\r” 表示换行以确认输入。

那么,这个脚本语言可以利用到很多地方了,在 Linux 下,经常需要键入内容的脚本,可以考虑用 expect 来实现自动化交互式的脚本来替代人工重复的活动。

(本文小谈博客原创,转载需注明出处!本文网址:http://blog.tanteng.me/2016/08/expcet-ssh-...

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2
TimJuly

存密码多不安全,快用密钥认证吧.

参见:SSH_keys

7年前 评论
TimJuly

另外,配置了别名后登陆不能更爽

Host xxx
    Hostname 127.0.0.1
    Port 22
    User root
ssh xxx
7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!