期望命令 - Unix

时间:2010-08-04 09:15:45

标签: linux unix ubuntu solaris opensolaris

我正在使用'expect'来自动化ssh密码验证。当我在SunOS中运行脚本时,我发现下面的脚本完成后,生成的ssh进程会被终止。在Linux中不是这种情况。我们如何避免它?我们应该以某种方式忽略SIGCHLD信号吗? 无论如何,通过这个脚本确定生成的进程是否成功并报告错误(如果有的话)?

#!/usr/local/bin/expect -f

set password blah-blah
spawn ssh -NfL 8002:<test domain>:22 test@testdomain.com
expect "* password:*"
send -- "$password\r"
send -- "\r"
expect EOF

-Karthik

2 个答案:

答案 0 :(得分:1)

如果使用ssh-key,则无需在shell脚本中对密码进行编码。

您甚至可以使用密码来加密密钥,并使用ssh-agent为您管理密钥 - 您在早上解锁密钥,启动隧道,然后在前往午餐时忘记密钥,在下午解锁你的钥匙,晚上回家时又忘记了。没有到远程机器的磁盘魔术网关。

答案 1 :(得分:1)

您可以将expect脚本放入后台,而不是将ssh命令放在后台:

#!/usr/local/bin/expect -f

if {[fork] != 0} exit
disconnect

set password blah-blah
spawn ssh -NL 8002:localhost:22 test@testdomain.com
expect {
    EOF {exit 1}
    "assword:" {}
}
send -- "$password\n"
send -- "\n"
expect EOF
wait

在Linux上为我工作。至少在设置阶段,停止它更加困难。我不得不kill -9停止期望脚本。这可能也需要杀死ssh进程。