1

我正在使用“期望”来自动执行 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

-卡提克

4

2 回答 2

1

如果您使用 ssh-keys,则无需在 shell 脚本中编写密码。

你甚至可以用密码加密密钥,并用它ssh-agent来为你管理密钥——你早上解锁你的钥匙,启动你的隧道,然后在你去吃午饭的时候忘记你的钥匙,下午解锁你的钥匙,晚上回家时又忘记了。没有远程机器的磁盘魔法网关。

于 2010-08-04T09:34:50.083 回答
1

除了将 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 进程。

于 2010-08-04T09:37:50.587 回答