【发布时间】:2015-11-18 20:32:47
【问题描述】:
我有 Linux red-hat 机器 - 5.X 版
我想创建一个期望脚本来验证远程机器的 ssh 登录是否成功
我的测试只是在远程登录时获得密码提示(我不想输入密码)
就像测试 ssh 连接性
到目前为止,我创建的是以下脚本
所以如果我得到密码提示,那么脚本需要返回 0
如果不是,那么脚本需要返回 1
我的脚本的问题在于 - 即使 ssh 登录失败,脚本也会返回 0(没有密码提示)
#!/usr/bin/expect
set LOGIN [lindex $argv 0]
set PASSWORD [lindex $argv 1]
set IP [lindex $argv 2]
set timeout 10
spawn ssh -o StrictHostKeyChecking=no $LOGIN@$IP
expect -re "(Password:|word:)"
exit 0
expect {
timeout {error "incorrect password"; exit 1}
eof
}
请告知如何更新我的脚本?
【问题讨论】:
-
您将永远无法通过 shell 脚本进行 SSH 键盘交互式登录。密码必须来自键盘。请改用基于密钥的身份验证。
-
Expect 模拟键盘。是的,expect 可以做到。
-
Kuhn - 如果 expect 可以做到这一点,您能否通过更新我的代码来告诉我需要更改哪些内容才能验证 SSH 登录?
-
那么你对
expect -re "(Password:|word:)"和exit 0这两行有什么期望呢?没有将密码发送到键盘的说明。代码只是在提示符中检测到某些内容并退出。 -
为了完整起见,现在有 sshpass 将取代此类预期 scipts。参见例如askubuntu.com/questions/282319/how-to-use-sshpass