如何在没有密码的情况下远程执行 ssh 命令和 sudo 命令

iza*_*ack 9 linux ssh remote debian sudo

我有一个 linux(基于 debian)服务器,它被配置为允许与用户“admin”的 SSH 会话,但不允许用户“root”。这两个帐户以某种方式关联,因为它们共享相同的密码。

在以管理员身份进行 SSH 会话期间,除非我切换到用户“root”,否则需要“sudo”来运行命令。

我有一些服务需要时不时地运行,甚至在系统启动时运行。我目前正在使用私钥/公钥机制在服务器上远程执行命令。一些命令是手动键入的,其他命令是我执行的 shell 脚本。当前,当命令使用 sudo 时,服务器仍然要求输入密码。

问题:如何在不提供密码的情况下以用户 'admin' 远程执行?是否可以使用私钥/公钥来满足 sudo?或者甚至是一种以用户“root”身份启动shell脚本的方法?

甚至可以避免使用 sudo 输入密码吗?如果没有,他们是否有其他替代方案来解决像我这样的情况?

Arc*_*mar 16

您可以告诉 sudo 跳过某些命令的密码。

例如在 /etc/sudoers

archemar  ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*
Run Code Online (Sandbox Code Playgroud)

这允许我使用

sudo -u www-data /bin/rm -rf /var/www/log/upload.*
Run Code Online (Sandbox Code Playgroud)

作为没有密码的archemar。

注意

sudo -u www-data rm -rf /var/www/log/upload.*
Run Code Online (Sandbox Code Playgroud)

将无法正常工作(会要求输入密码)为rm来自不同/bin/rm

请务必/etc/sudoers使用visudo命令进行编辑。

一旦达到高级水平,您可能希望在/etc/sudoers.d.


use*_*494 7

最简单的方法是提供密码(stdin如果您sudo支持)(-S 键)

ssh -t admin@remotehost "echo <yourpassword> |sudo -S <yourcommand>"
Run Code Online (Sandbox Code Playgroud)

  • 这很糟糕,因为密码会显示在很多地方(在屏幕上,在进程列表中,在历史文件中) (8认同)
  • -1 这不好,因为密码在很多地方都能看到 (2认同)
  • 也许将密码插入环境文件中会使该解决方案更容易被接受。即`ssh -t admin@remotehost "echo $YOUR_PASSWORD | sudo -S &lt;yourcommand&gt;"`,在`~/.bashrc`文件中定义别名`YOUR_PASSWORD`。 (2认同)