无需输入密码执行交互式 SSH、SCP

expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh之类需要用户手动输入密码然后确认的任务。有了这个工具,定义在scp过程中可能遇到的情况,然后编写相应的处理语句,就可以自动地完成scp操作了。

下面就是一个使用expect来完成scp时无需输入密码的脚本:

#!/usr/bin/expect
set timeout 10
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set src_file [lindex $argv 3]
set dest_file [lindex $argv 4]
spawn scp $src_file $username@$host:$dest_file
 expect {
 "(yes/no)?"
  {
    send "yes\\n"
    expect "*assword:" { send "$password\\n"}
  }
 "*assword:"
  {
    send "$password\\n"
  }
}
expect "100%"
expect eof

参考文献

简 悦