首页 > Linux > 用expect实现自动发送密码

用expect实现自动发送密码

2010年12月10日 发表评论 阅读评论

经常遇到这种情况,如使用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
分类: Linux 标签: , ,
  1. 565635853
    2012年3月8日10:10 | Internet Explorer Internet Explorer 8.0 Windows Windows XP|#1

    请教一下,这是怎么回事呢
    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)

    [回复]

  2. 不行
    2011年2月9日20:27 | Google Chrome Google Chrome 10.0.648.18 Linux Linux |#2

    不行,密码一发ssh进程就挂了…… [s:10]

    [回复]

  1. 本文目前尚无任何 trackbacks 和 pingbacks.

设置头像请到Gravatar上使用邮箱注册

订阅评论
[s:22] [s:21] [s:20] [s:19] [s:18] [s:17] [s:16] [s:15] [s:14] [s:13] [s:12] [s:11] [s:10] [s:09] [s:08] [s:07] [s:06] [s:05] [s:04] [s:03] [s:02] [s:01]