如何防止 scp/ssh 尝试读取标准输入

how to prevent scp/ssh from trying to read standard input

我正在使用授权密钥将文件从一台服务器传递到另一台服务器。 但是,如果密钥不再有效,则会不断要求脚本输入密码。

我试过了

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 的笔记。

But how can I create a blank input stream, that will not be prompting the user if the script is run interactively?

而不是禁用密码验证。

scp -o BatchMode=yes -o PasswordAuthentication=no -o PubkeyAuthentication=yes ... 

这也可以

scp ${user}@${host}:/tmp ./file1 /dev/tty0 > /dev/null