使用expect程序登录远程服务器

使用expect程序登录远程服务器

我编写了一个期望程序(请参阅下文:),我试图将文件复制到远程计算机。在scp'ing 时,如果我提供了错误的密码,我的期望是满足第二个条件并打印错误,程序将退出。

然而,最终发生的事情是,无论我是否提供正确的密码,它都满足所有条件并且程序出错。

我在这里做错了什么吗?任何帮助将非常感激。

spawn scp -p -o StrictHostKeyChecking=no $x $y ${toolpath}/cmd.sh $user@$ip:/x/home/$user
while (1) {
expect {
        "?assword:" {
                send_log "Password entered for scp'ing to $ip\n"
                send  "$password\n"
                }
        "Permission denied, please try again" {
                send_user "$ip : You have entered wrong password, Permission denied\n"
                exit 1
                }
        "timeout" {
                send_user "$ip : Failed to scp - timed out\n"
                exit 1
                }
        "lost connection" {
                send_user "$ip : Connection lost\n"
                exit 1
                }
        }
}

答案1

您只是exp_continue在密码块中丢失了。这实际上会循环回到expect命令的开头,这样你就可以等待其他模式之一。

但认真地说,使用 ssh 密钥身份验证。这更容易。

相关内容