如何以 root 权限在远程服务器上运行 shell

如何以 root 权限在远程服务器上运行 shell

我想在远程服务器上执行 shell 脚本,并且该脚本应该由 root 运行,不需要密码(或sudo在脚本中使用)。有人可以给我一些建议吗?

答案1

除了使用 的解决方案之外sudo,还可以进行脚本友好的配置(特定命令没有额外的密码提示)或设定值对于不容易做到安全的解决方案,我建议使用带有 command= 限制的 ssh 公钥授权。

为此,您需要启用 root 用户的无密码登录(如果尚未完成)(PermitRootLogin without-password在 中),并使用 command= 参数/etc/ssh/sshd_config添加您的(或者更好地为这种情况创建的特殊)ssh 公钥,如中所述/root/.ssh/authorized_keys这个答案

答案2

您不需要将 root 密码放入脚本中。

方案A

suid 服务器上的脚本,并使其仅由 root 或您的用户组读取/可执行。

chmod 4750 script.sh
chgrp your_group script.sh

不要忘记将您的用户加入该组。

然后您就ssh user@XXXX '/path/to/script.sh'可以执行该脚本了。

方案B

创建 SSH 密钥,并将公钥复制到远程服务器。这样您就必须以 root 身份登录,但也无需密码。 (记得用openssl解密你的私钥)

如果你丢失了私钥,那是非常危险的。

答案3

无需root用户的保存方案

在客户端生成 ssh-key

客户: ssh-keygen

将其复制到服务器

服务器:mkdir ~/.ssh

客户:scp ~/.ssh/id_rsa.pub serveruser@server:~/.ssh/authorized_keys

允许您的用户使用 sudo 而不需要密码

服务器:

visudo
    serveruser ALL=(ALL) NOPASSWD: /usr/bin/foo /usr/sbin/bar

现在你可以运行这样的命令

客户:ssh serveruser@server 'sudo foo && bar'

//有些服务器我需要ssh -t ...使用sudo

相关内容