在 macOS 上自动执行 SFTP 密码身​​份验证以与 -b 批处理一起使用?

Automating SFTP password authentication on macOS for use with -b batch processing?

我想要一个脚本来使用 sftp 上传日常文件。不幸的是,远程服务器不支持 ssh 密钥(这是我客户的服务器,出于某种原因,尽管有无数建议,他们不能或不会更改它)。所以我需要以某种方式使用密码身份验证自动登录。

我发现了许多不同的解决方案(在此处和其他地方),但它们似乎都使用了 sshpassspawnexpectsend 等工具。不幸的是,我的脚本将在 macOS 上使用,这些工​​具在那里不可用。

我完全意识到在脚本或命令行中使用明文密码是不安全的。但是在这个阶段使用 ssh 密钥根本不是一个选项。

那么,是否可以从 shell 运行 sftp 并在命令行上以明文形式指定密码,或者使用包含密码?

补充:在@MartinPrikryl 发表评论后,我使用brew install esolitos/ipa/sshpass.
sshpass 开始工作 但是现在我发现当我使用 sftp-b batch.txt 参数来处理一堆命令时,这不能正常工作。我正在处理的批次通常是一堆 get 和 put 命令。

所以这有效:

sshpass -f MyPassword.txt sftp rocketnuts@example.com

(我已登录并收到 sftp 提示)

但这不是:

sshpass -f MyPassword.txt sftp -b list.txt rocketnuts@example.com

我收到这个错误:

rocketnuts@example.com: Permission denied (password).

显然 sshpass 将密码发送到 sftp 的方式以某种方式干扰了 -b 参数的批输入。

有没有办法让 sshpass(或另一种形式的脚本验证)与 -b 选项结合使用?

首先,您甚至可以在 MacOS 上安装 sshpass


虽然确实如此,-b switchsftp 可能无法接受密码,因为 -b 禁用所有交互式输入(sshpass 模拟)。

作为 -b 的替代方法,您可以使用输入重定向:

sshpass -f MyPassword.txt sftp rocketnuts@example.com < list.txt