sshpass 实用程序是否比手动 ssh 密码验证不安全?

信息安全 SSH
2021-09-09 06:31:24

我打算使用以下命令通过 ssh 使用 rsync 自动将大文件复制到远程服务器:

sshpass -p '<PASS>' rsync --partial -av --progress --inplace --rsh='ssh -p 22' ${TAR_PATH} <SERVER_IP>:

该命令将通过 Jenkins 运行。操作员将在 Jenkins 中输入密码。

我在这里使用 sshpass 来自动为 ssh 提供密码。与手动 ssh 操作相比是否不安全?如果我在没有 sshpass 的情况下手动运行 rsync 会更安全吗?

3个回答

它不如手动操作安全,但如果您使用 Jenkins,您显然是在尝试自动化。话虽如此,请注意sshpass 主页,当它说:

Most users should use SSH's more secure public key authentication instead.

使用 sshpass 可能会将明文密码留在日志文件和/或命令历史日志中,这是非常不可取的。无密码的密钥会比这更安全。

在您消除将密码暴露给第三方的风险之前,它的安全性较低。

如果 sshpass 命令仍在执行,而其他用户(即使访问权限有限)也可以发出 ps 命令,则会出现问题。密码可能会暂时显示在列表中,作为进程调用的一部分,即使在日志和命令历史记录之外,绕过文件查看限制也是如此。这些只是用于直接读取这些日志和历史文件。

有多种解决方案可以将密码从外部资源读入标准输入,以避免在进程调用中出现。指向某些解决方案超出了此答案的范围。

您仍然需要审核对存储在其他地方的密码的访问是否足够安全以满足您的要求。

-p大多数人都在谈论将它与选项一起使用,但它也有其他更安全的选项。

您还可以将 sshpass 与 GPG 加密文件一起使用。使用-f开关时,参考文件为明文。让我们看看如何使用 GPG 加密文件并使用它。

来源

首先,创建一个文件,如下所示:

$ echo '!4u2tryhack' > .sshpasswd

接下来,使用 gpg 命令加密文件:

$ gpg -c .sshpasswd

删除包含明文的文件:

$ rm .sshpasswd

最后,按如下方式使用:

$ gpg -d -q .sshpassword.gpg > pass_file; sshpass -f pass_file ssh user@srv1.example.com