在 bash 脚本中,我想知道如何通过管道输入答案,例如:
ssh -l username -i /home/ubuntu/.ssh/id host.com < yes
ssh 连接会询问我是否要继续连接,我想自动输入答案“是”并输入,但我的脚本“<yes”似乎不起作用。有人知道如何在 Ubuntu 下的 bash 中正确输入和输入响应“是”吗?
答案1
通常,只有在 ssh 执行主机密钥检查时才会询问您是否要连接。与其尝试使用 expect 或管道来禁用它,不如直接在 ssh 配置中禁用它。
添加StrictHostKeyChecking no
到您的~/.ssh/config
,然后 ssh 将不再询问您是否要连接,它只会连接。
答案2
用来ssh -o "StrictHostKeyChecking no" -l username -i /home/ubuntu/.ssh/id host.com
完全避免该问题。
答案3
首先,你应该尝试这个,而不是< yes
:
$ echo "yes" | ssh -l username -i /home/ubuntu/.ssh/id host.com
其次,即使这样也行不通,因为 ssh 不会从 stdin 读取答案,而是直接从终端读取,所以你需要类似预计:
$ expect -c 'spawn dislocate ssh -l username -i /home/ciupicri/.ssh/id_rsa test3
expect {
"(yes/no)? " {
send "yes\n"
expect {
"Warn" exit
}
}
}'
$ dislocate
脱臼是 Expect 附带的命令(至少在 Fedora 上)。y
当被问到时,请回答connect? [y]
。
您也可以尝试使用期望,一个纯 Python 类 Expect 模块。查看其配置单元和sshls.py 复制代码例子。