首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >预期命令- Unix

预期命令- Unix
EN

Stack Overflow用户
提问于 2010-08-04 17:15:45
回答 2查看 3.6K关注 0票数 1

我正在使用'expect‘自动执行ssh密码身份验证。当我在SunOS中运行该脚本时,我发现在完成下面的脚本后,衍生的ssh进程就会终止。在Linux中情况并非如此。我们如何避免它呢?我们应该忽略SIGCHLD信号吗?有没有办法通过这个脚本来确定派生的进程是否成功并报告错误?

代码语言:javascript
运行
复制
#!/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

EN

回答 2

Stack Overflow用户

发布于 2010-08-04 17:34:50

如果使用ssh-key,就不需要在shell脚本中编写密码。

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

票数 1
EN

Stack Overflow用户

发布于 2010-08-04 17:37:51

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

代码语言:javascript
运行
复制
#!/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进程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3404127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档