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 作为程序执行,因此失败并显示命令未找到