我正在使用'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
发布于 2010-08-04 17:34:50
如果使用ssh-key,就不需要在shell脚本中编写密码。
您甚至可以使用密码短语加密密钥,并使用ssh-agent为您管理密钥--早上解锁密钥,开始隧道,然后在去吃午饭时忘记密钥,下午解锁密钥,晚上回家时又忘记了。没有通向远程机器的磁盘上的魔法网关。
发布于 2010-08-04 17:37:51
您可以将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命令来停止expect脚本。这可能还需要杀死ssh进程。
https://stackoverflow.com/questions/3404127
复制相似问题