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

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

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

# 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`

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

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

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

更新#2:

echo myPassword | sudo -S ls /tmp

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

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

答案1

你想做的事情本身就是昆虫,确实不应该做。

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

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

然后设置公钥身份验证,以便您可以ssh root@server -p 666 "ls -la /"从桌面计算机进行身份验证,而无需 sudo 和密码。

甩掉包袱 :-)

答案2

这不是最好的方法。但是,您的方法并不存在您声称的缺陷。当你跑步时

echo myPassword | sudo -S ls /tmp

密码永远不会作为外部命令的参数出现:所有 shell(除了某些 BusyBox 安装 - 它取决于编译选项)都已echo内置。

答案3

我实际上使用Python织物卡皮斯特拉诺。它们都很容易学习,并且会让您的生活变得更加轻松。

答案4

我认为这是错误的方法,你想做什么?

使用临时命令远程控制机器,然后使用类似csshx

或者通过 cron 自动让 root 运行作业,然后只需在服务器上设置 cron 作业,服务器不依赖于客户端计算机来登录和启动作业。

相关内容