在 macOS 上自动执行 SFTP 密码身份验证以与 -b 批处理一起使用?
Automating SFTP password authentication on macOS for use with -b batch processing?
我想要一个脚本来使用 sftp 上传日常文件。不幸的是,远程服务器不支持 ssh 密钥(这是我客户的服务器,出于某种原因,尽管有无数建议,他们不能或不会更改它)。所以我需要以某种方式使用密码身份验证自动登录。
我发现了许多不同的解决方案(在此处和其他地方),但它们似乎都使用了 sshpass
、spawn
、expect
、send
等工具。不幸的是,我的脚本将在 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
switch,sftp
可能无法接受密码,因为 -b
禁用所有交互式输入(sshpass
模拟)。
作为 -b
的替代方法,您可以使用输入重定向:
sshpass -f MyPassword.txt sftp rocketnuts@example.com < list.txt
我想要一个脚本来使用 sftp 上传日常文件。不幸的是,远程服务器不支持 ssh 密钥(这是我客户的服务器,出于某种原因,尽管有无数建议,他们不能或不会更改它)。所以我需要以某种方式使用密码身份验证自动登录。
我发现了许多不同的解决方案(在此处和其他地方),但它们似乎都使用了 sshpass
、spawn
、expect
、send
等工具。不幸的是,我的脚本将在 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
switch,sftp
可能无法接受密码,因为 -b
禁用所有交互式输入(sshpass
模拟)。
作为 -b
的替代方法,您可以使用输入重定向:
sshpass -f MyPassword.txt sftp rocketnuts@example.com < list.txt