【发布时间】:2020-09-27 03:23:20
【问题描述】:
我正在使用授权密钥将文件从一台服务器传递到另一台服务器。 但是,如果事件密钥不再有效,则会不断要求脚本输入密码。
我试过了
scp ${user}@$host}:/tmp ./file1 </dev/null
但我仍然得到提示。 唯一可行的情况是我像这样不按计划运行它:
echo "scp ${user}@$host}:/tmp ./file1" | at now
在这种情况下,如果密钥不再有效,它将正确出错。
但是如何创建一个空白输入流,如果脚本以交互方式运行则不会提示用户?
@大卫:
echo "" | scp ${user}@${host}:/tmp ./file1 </dev/null
没有帮助,同样的响应,所以它可能需要一个 stty 命令来将 tty 输入归零,我现在猜,根据 Kenster 的说明。
【问题讨论】:
-
密钥认证失败时提示,说明服务器开启了密码认证。除非您可以更改服务器配置,否则您只需要处理它。现在您还可以选择提供客户端
~/.ssh/config,您应该可以在其中设置PasswordAuthentication no并将其作为身份验证方法删除(注意:我没有尝试过,但我不明白为什么不会工作)。如果没有,你会遇到类似echo "" | scp ${user}@$host}:/tmp ./file1 </dev/null这样的东西,如果失败,它会在stdin上提供空字符串。 -
另请注意,这是一个可能被解释为题外话的问题,因为它不是真正的“编程”相关,而是“如何在密钥验证失败的情况下使用 scp ...”,因此您可能希望将问题迁移到 StackExchange 站点 Super User 或 Unix & Linux。
-
ssh(以及 scp 和 sftp)实际上是从 /dev/tty 而非标准输入读取密码和密码。