【Shell 语法】expect 实现免登

expect 能够通过捕获脚本的输出,模拟控制台的输入,从而实现自动交互。
这里用这个命令是为了实现免登陆。

免登陆的原理是,通过ssh-keygen -t dsa 生成dsa密钥,然后将密钥传递到目标机器的~/.ssh/authorized_keys 文件,即可实现免登。

但是在传递密钥时依然是需要输入密码的,如果机器比较多,再一个一个的输入就比较麻烦了,私用expect拦截脚本输出,然后发送密码的方式比较爽。

expect 通过spawn 命令执行shell命令,然后产生的输出能够通过expect命令捕获,再根据捕获到的内容,通过send _string 将需要输入的内容模拟输入。

#! /usr/bin/expect
set timeout 5
set host [lindex $argv 0]
set pwd [lindex $argv 1]
spawn scp /home/dilu.kxq/.ssh/id_dsa.pub ${host}:/home/dilu.kxq/
set done 1
while { $done } {
expect {
-re ".*assword:" { send "$pwd\r" }
-re ".*yes" { send "yes\r" }
-re ".*id_dsa.*" { send "\r" }
-re ".*agin" { send "\r" }
eof { set done 0 }
}
}


这里是一个完成的,用于向远端机器发送文件的脚本。
注意, -re 是使用正则表达式匹配;
send "_string\r"里面的 \r 是从发送命令返回,如果没有 \r , 发送命令将不会返回。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值