如何使用“sudo su -”以root身份安全地自动运行命令?

gas*_*ter 2 security ssh authentication sudo

提示(在客户端,如何加密文件/密码):

# encrypt pwd with ssh key: 
openssl rsa -in ~/.ssh/id_rsa -outform pem > ~/.ssh/TEMP-id_rsa.pem 2>/dev/null
openssl rsa -in ~/.ssh/id_rsa -pubout -outform pem > ~/.ssh/TEMP-id_rsa.pub.pem 2>/dev/null
echo $PWDHERE > ~/.ssh/TEMP.pwd
openssl rsautl -encrypt -pubin -inkey ~/.ssh/TEMP-id_rsa.pub.pem -in ~/.ssh/TEMP.pwd -out ~/.ssh/TEMP.pwd.enc 2>/dev/null
rm ~/.ssh/TEMP.pwd > /dev/null 2>&1

# decrypt: 
PWDHERE=`openssl rsautl -decrypt -inkey ~/.ssh/TEMP-id_rsa.pem -in ~/.ssh/TEMP.pwd.enc`
Run Code Online (Sandbox Code Playgroud)

因此,在服务器端使用 root 用户通过 SSH 在服务器上自动运行命令将是一项非常简单的任务(最后,我们需要使用 root 用户从服务器端的台式机运行脚本,但运行命令自动化就足以知道,从那里我们可以做这件事..)。

但是:问题是,如果我们必须首先在服务器上“sudo su -”并在其中输入密码,如何安全地使用 root 自动运行命令?

更新:修改 sudoers 文件不是一个选项。(也许木偶可以做到这一点??)

更新#2:

echo myPassword | sudo -S ls /tmp
Run Code Online (Sandbox Code Playgroud)

AFAIK 不安全。(因为如果其他用户 'ps -ef' 他们可以看到密码一小段时间?)所以这也不是解决方案。

更新#3:我想做“使用临时命令远程控制机器”

Ban*_*uin 10

你想要做的是昆虫本身,真的不应该做。

有鉴于此,也许您想重新考虑您对“安全”的要求。sudo到底何必呢?您可以设置一个(第二个)SSH 服务器,它接受以 root 用户身份登录,但仅使用公钥身份验证。这样,您根本不需要传输密码,只需以 root 用户身份登录并运行您的命令。你可以简单地

  • 从您当前的 ssh 服务器复制配置,该服务器很可能存储在/etc/ssh/sshd_config,
  • 修改为
    • 允许root登录,
    • 允许公钥认证,
    • 拒绝密码认证,
    • 让它监听不同的端口,例如 666
  • sshd使用-f选项启动一个新实例,使其使用新的备用配置文件。

然后您设置公钥身份验证,这样您就可以ssh root@server -p 666 "rm -rf /"从您的台式机上运行,​​而无需 sudo 和密码。

甩掉包袱 :-)