提示(在客户端,如何加密文件/密码):
# 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
答案4
我认为这是错误的方法,你想做什么?
使用临时命令远程控制机器,然后使用类似csshx
或者通过 cron 自动让 root 运行作业,然后只需在服务器上设置 cron 作业,服务器不依赖于客户端计算机来登录和启动作业。