为什么 heredoc 不适用于 sftp 密码?

Why heredoc does not work for sftp password?

我想使用 heredoc 输入密码到 sftp:

sftp root@example.com <<EOF
password
EOF

但是不行。 sftp 仍然要求我输入密码。我知道我可以使用 sshpass 输入密码,但为什么我不能只使用 heredoc 输入密码。我认为 heredoc 将被读取为 sftp 的标准输入。我是不是误会了什么?

sftp 会在图形环境下 运行ning 时从 /dev/tty 或其他程序中读取密码。当您从终端 运行 sftp 时,stdin 是 /dev/tty。 heredoc 替换标准输入,但 sftp 将始终读取 /dev/tty 作为密码。

我建议使用sshpass:

SSHPASS='password' sshpass -e sftp root@example.com

来自man sshpass

-e: The password is taken from the environment variable "SSHPASS".