【问题标题】:expect command - Unix期望命令 - Unix
【发布时间】:2010-08-04 09:15:45
【问题描述】:

我正在使用“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

-卡提克

【问题讨论】:

  • 对这个问题有什么建议吗?

标签: linux unix ubuntu solaris opensolaris


【解决方案1】:

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

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

【讨论】:

  • 感谢您的提示。但我认为这并不能回答我的主要问题。我正在寻找方法来询问期望不要杀死生成的进程。
  • 这是最好的解决方案 - ssh 密钥是处理自动登录的最佳方式。
  • @Kartlee,确实,我不知道期待好,多年没有使用它。 (对于同样的问题,直到一位同事告诉我使用 ssh-keys。呵呵。)
【解决方案2】:

您可以将期望脚本置于后台,而不是将 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 进程。

【讨论】:

  • 原始脚本在 Linux 中运行良好。我只在 SunOS 中看到了不同。此外,您现在给出的建议似乎也不起作用。
  • 恐怕我目前没有任何地方可以有效地测试它。可能需要进行一些调整才能使其正确。
  • 我已经对其进行了一些编辑。但真的 - ssh 键是要走的路。
猜你喜欢
  • 1970-01-01
  • 2015-04-22
  • 2016-10-16
  • 2015-03-04
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 2014-08-05
  • 2017-04-01
相关资源
最近更新 更多