使用 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-...

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 2
TimJuly

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

参见:SSH_keys

7年前 评论
TimJuly

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

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

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