linux expect scp自动输入密码

Table of Contents

    Expect是一个根据脚本与其他交互程序进行“对话”的程序,通过脚本,Expect根据程序的输出信息来判断需要什么输入,然后将输入信息发送给程序。详细文档

    现在通过一个简单的例子来使用它,使用scp在不同机器间传输文件每次都要输入密码,expect可以去掉输入密码这个步骤。

    脚本如下,假如名字是sync.sh,远程主机的密码是123456

    #!/usr/bin/expect -f
    set timeout -1
    set password "123456"
    
    set src [lindex $argv 0]
    set dst [lindex $argv 1]
    
    spawn scp $src $dst
    
    expect {
            "yes/no" { send "yes\r"; exp_continue }
            "password:" { send "$password\r"; }
    }
    
    expect eof
    exit
    

    用法: 执行下面的命令,传输aaa文件到另一台机器的home目录就不用输入密码了

    ./sync.sh aaa 172.16.77.100:/home
    

    如果你要传输多个不同的文件可以在另外的脚本里面多次调用sync.sh这个脚本