期待脚本和ssh

时间:2014-10-11 10:22:48

标签: linux shell expect

我已经实现了expect脚本来自动化某些服务器上的ssh连接。

当psh第一次尝试打开与服务器的连接时出现

问题,我得到了是/否的问题。

我必须先手动执行连接,然后再次出现并且脚本运行良好。

第一:我需要你的帮助才能在期望脚本中找到跳过这个问题的步骤,这可能吗?

2 个答案:

答案 0 :(得分:0)

  1. 以下是一个例子:

    #!/usr/bin/env expect
    
    spawn ssh root@127.0.0.1
    
    while {1} {
        expect "(yes/no)?" {
           send "yes\r"
        } "password: " {
            send "xxxxxxxx\r"
            interact 
            exit 0
        }
    }
    
  2. 如果您的根目的只是自动ssh,请尝试使用sshpass,但sshpass通常不是默认安装:

    `sshpass -p xxxxxxxx ssh root@127.0.0.1`
    
  3. 此处还提供了设置公钥/私钥对的过程,这使您无需密码即可访问目标服务器:

    Generate a key pair, id_dsa.pub id_dsa with following command:
        ssh-keygen -t dsa -b 1024 
    Move id_dsa to client:/home/xxxx/.ssh/ 
    Move id_dsa.pub to server:/home/xxxx/.ssh/, and "cat id_dsa.pub >> authorized_keys"
    chmod 600 /home/xxxx/.ssh/* (both the id_dsa and remote authorized_keys)
    

答案 1 :(得分:0)

set timeout 30
spawn ssh -o "StrictHostKeyChecking no" "$usr@$ip"
expect {
    "RSA key fingerprint" {send "yes\r"; exp_continue}
    -re "<regex for whatever the yes/no question is>" {send "yes\r"; exp_continue}
    "assword:" {send "$password\r"}
}
sleep 5
interact

将所有内容保持在循环中,直到超时时间(30秒)。然后它将移动到脚本中的下一行。如果你需要,我还增加了对RSA的期望。