gpt4 book ai didi

ssh - 没有超时退出期望{}

转载 作者:行者123 更新时间:2023-12-04 07:12:43 25 4
gpt4 key购买 nike

我正在努力解决在 ssh 中自动输入密码的经典问题,并且喜欢
关于期望,我在黑暗中蹒跚而行。最后我拼凑了一个有点工作的脚本:

#!/usr/bin/expect -f

# command line args
set user_at_host [lrange $argv 0 0]
set password [lrange $argv 1 1]

set timeout 1

# ssh command
spawn ssh -S ~/.ssh/tmp.$user_at_host -M -N -f $user_at_host

# deal with ssh prompts
expect {
"*yes/no*" { send "yes\r" ; exp_continue }
"*assword:" { send "$password\r" ; exp_continue }
}

此脚本仅由于 timeout 1 才终止行,没有它它只是挂起,并且只会通过用户交互终止( ^C )。

spawn line 是一个直接的 ssh 命令,脚本立即终止,但是这是 not your straight forward ssh .可能不同的是 -f使其在后台运行的选项(但我尝试了没有它的脚本无济于事)。

我读到了 interactexpect eof可能会有所帮助,但我无法找到实际可以做到的正确咒语。

我的问题(我认为)是如何制作一个生成后台进程的预期脚本,在没有超时的情况下终止?

编辑:我应该预料到(没有双关语)“使用无密码 ssh 身份验证”的答案。虽然这是一个合理的建议,但在我的场景中它不是合适的解决方案:在受信任的环境中自动测试普通安装的系统,其中向图像添加受信任的 key 是不可取的/不可能的。

最佳答案

你可能想要:

expect {
"*yes/no*" { send "yes\r" ; exp_continue }
"*assword:" { send "${password}\r" }
}
expect $the_prompt
send "exit\r"
expect eof

更新

我错过了您通过 ssh 发送命令。我认为你需要的只是这个:
spawn ssh a@b foo bar baz
expect {
"*yes/no*" { send "yes\r" ; exp_continue }
"*assword:" { send "${password}\r" }
eof
}

你打了 eoffoo命令完成。

关于ssh - 没有超时退出期望{},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3141384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com