用expect实现自动发送密码
经常遇到这种情况,如使用ssh,scp等一些命令时需要输入密码,但是如果这个命令是经常敲的(比如fanqiang),每次都输入密码确实很烦,对于ssh可以使用证书登录来解决,但是这个并不能适用于所有需要输密码的情形,所以可以通过以下的办法自动发送密码来实现免输密码登录(实际上还是输了密码,只不过不需要手动输入了)。
要做到这一点,使用的东西就是expect,和它下面的spawn
在脚本中首先要加上#!/bin/expect,使用expect来运行脚本,之后在需要监视的命令前加上spawn,只有在spawn后执行的shell命令,才会被expect捕捉到。
随后通过expect “something”,来捕捉信息,如 expect “password:”,这样expect捕捉到命令行中有password:这样的字条串后,才可以使用send等命令发送密码或其它字符。
捕捉到待输入密码后,使用send “yourpassword\r”,将密码发送,最后要加上回车符\r。
这样虽然密码发送了,但是往往还达不到效果,因为spawn监视的命令行执行完的会发送一个eof,我们同样要捕捉这一个eof,来结束命令执行,最后要写上expect eof
这样,整个过程就可以说完成了,附上一个fanqiang用的expect脚本
#!/usr/bin/expect spawn ssh -qTfnN -D 7070 username@server expect -exact "password:" send "yourpassword\r" expect eof
请教一下,这是怎么回事呢
spawn ssh root@192.168.5.92
couldn’t execute “ssh”: no such file or directory
while executing
“spawn ssh root@192.168.5.92”
(file “test_ssh.sh” line 3)
[回复]
不行,密码一发ssh进程就挂了……
[回复]