sshpass 想使用 sftp 的参数
sshpass want to use parameter of sftp
您好,我创建了以下脚本来初始化我的存储盒,以便稍后使用没有密码的 rsync。如果我没记错的话,去年它是有效的...
cat .ssh/id_rsa.pub >> .ssh/storagebox_authorized_keys
echo -e "mkdir .ssh \n chmod 700 .ssh \n put $.ssh/storagebox_authorized_keys" \
".ssh/authorized_keys \n chmod 600 .ssh/authorized_keys" | sshpass -p ${storage_password} \
sftp -P ${storage_port} -i .ssh/id_rsa ${storage_user}@${storage_address}
今天我收到以下错误:
sshpass: invalid option -- 'i'
但是参数 -i 属于 sftp 而不是 sshpass - 是否有可能以正确的方式解析参数?
编辑:我换了
的位置
-i .ssh/id_rsa ${storage_user}@${storage_address}
并得到这个错误
sshpass: Failed to run command: No such file or directory
编辑:这似乎是一个 sftp 问题...
经过讨论,更新答案以正确支持自动化
第 1 步:
创建一个 sftp“批处理文件”,例如:~/.ssh/storage-box_setup.sftp
mkdir .ssh
chmod 700 .ssh
put /path/to/authorized_keys_file ".ssh/authorized_keys
chmod 600 .ssh/authorized_keys
/path/to/authorized_keys_file
是一个包含 public 个密钥的文件,其中只有应该可以访问您的存储箱的密钥 (.ssh/storagebox_authorized_keys
)
第 2 步:
将自动化脚本命令更新为
sshpass -p <password> -- sftp -P <port> -b ~/.ssh/storage-box_setup.sftp user@host
-b
标志是您需要的答案。
参考:man sftp
-b batchfile
Batch mode reads a series of commands from an input batchfile instead of stdin. Since it lacks user interaction it should be used in conjunction with non-interactive authentication.
--
sshpass -p ${storage_password} -- \
sftp -P ${storage_port} -i .ssh/id_rsa \
${storage_user}@${storage_address}
sftp
之前的 --
是一种告诉 sshpass
(和大多数其他程序)停止 解析 参数的方法。
--
之后的所有内容都被假定为最后一个参数,在 sshpass
的情况下是要执行的命令 ssh -i ~/.id_rsa ...
如果你想知道切换 -i
的位置,告诉 sshpass 将 -i
作为程序执行,因此失败并显示命令未找到
您好,我创建了以下脚本来初始化我的存储盒,以便稍后使用没有密码的 rsync。如果我没记错的话,去年它是有效的...
cat .ssh/id_rsa.pub >> .ssh/storagebox_authorized_keys
echo -e "mkdir .ssh \n chmod 700 .ssh \n put $.ssh/storagebox_authorized_keys" \
".ssh/authorized_keys \n chmod 600 .ssh/authorized_keys" | sshpass -p ${storage_password} \
sftp -P ${storage_port} -i .ssh/id_rsa ${storage_user}@${storage_address}
今天我收到以下错误:
sshpass: invalid option -- 'i'
但是参数 -i 属于 sftp 而不是 sshpass - 是否有可能以正确的方式解析参数?
编辑:我换了
的位置-i .ssh/id_rsa ${storage_user}@${storage_address}
并得到这个错误
sshpass: Failed to run command: No such file or directory
编辑:这似乎是一个 sftp 问题...
经过讨论,更新答案以正确支持自动化
第 1 步:
创建一个 sftp“批处理文件”,例如:~/.ssh/storage-box_setup.sftp
mkdir .ssh
chmod 700 .ssh
put /path/to/authorized_keys_file ".ssh/authorized_keys
chmod 600 .ssh/authorized_keys
/path/to/authorized_keys_file
是一个包含 public 个密钥的文件,其中只有应该可以访问您的存储箱的密钥 (.ssh/storagebox_authorized_keys
)
第 2 步:
将自动化脚本命令更新为
sshpass -p <password> -- sftp -P <port> -b ~/.ssh/storage-box_setup.sftp user@host
-b
标志是您需要的答案。
参考:man sftp
-b batchfile
Batch mode reads a series of commands from an input batchfile instead of stdin. Since it lacks user interaction it should be used in conjunction with non-interactive authentication.
--
sshpass -p ${storage_password} -- \
sftp -P ${storage_port} -i .ssh/id_rsa \
${storage_user}@${storage_address}
sftp
之前的 --
是一种告诉 sshpass
(和大多数其他程序)停止 解析 参数的方法。
--
之后的所有内容都被假定为最后一个参数,在 sshpass
的情况下是要执行的命令 ssh -i ~/.id_rsa ...
如果你想知道切换 -i
的位置,告诉 sshpass 将 -i
作为程序执行,因此失败并显示命令未找到