如何安全地将密码传递到远程服务器以执行 sudo 命令

如何安全地将密码传递到远程服务器以执行 sudo 命令

我有一个很长的 bash 脚本,最后是在远程服务器上执行 sudo 命令的命令:

10 hours of local processing
ssh user@ip "sudo ls"

我已经设置了 ssh 密钥来连接到服务器并且它正在工作,但还不足以运行 sudo 命令。另外,因为此命令位于脚本末尾,所以我不想等待 sudo 密码的交互式提示。理想情况下,我希望在脚本开头提示输入密码,将此密码存储在变量中,然后在 ssh 命令中传递此变量以在远程服务器上执行 sudo 命令。

这就是我被困住的地方。我读过无数关于此的文章,但其中一半建议使用这个:

ssh $HOST 'echo $PASSWORD | sudo -S $COMMMAND'

这是很危险的,因为它暴露了我的密码,其中一半建议禁止远程服务器上的 sudo 命令不需要密码。

这真的是唯一的两个解决方案吗?

答案1

您可以添加sudo --validate到开始,它会在开始时询问密码,并缓存(默认)15 分钟。

您可以编辑/etc/sudoers, 添加例外(无需密码即可运行的命令)。 (这可能不合适。)

您可以以 root 身份运行整个过程,然后放弃特权并运行子 shell,root shell 将等待子 shell 完成,然后执行其操作。

添加 root 的 ssh 密钥,以便您可以以 root 身份连接。

相关内容