在远程服务器上以 root 身份运行本地脚本 [重复]
Posted
技术标签:
【中文标题】在远程服务器上以 root 身份运行本地脚本 [重复]【英文标题】:run a local script as root on remote server [duplicate] 【发布时间】:2017-07-27 01:28:32 【问题描述】:我尝试以 root 身份在多个远程服务器上运行本地脚本。我没有 su 来根这些,但可以使用 sudo 运行根命令。到目前为止,我尝试过:
for host in $(cat hosts_list); do ssh -tt $host "echo mypassword | sudo bash -s" < ./myscript.sh
在 myscript.sh 中有类似的东西:
echo "test test123" >> /etc/tests
exit 0
但它看起来不起作用并且不会更改文件。以 root 身份运行此脚本且无需为每个主机分别输入密码的正确方法是什么?
【问题讨论】:
我认为这更适合ServerFault 我相信这是一个纯粹的 shell 脚本问题。 尝试sudo echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
然后sudo service ssh restart
作为建议,你可以看看 ansible docs.ansible.com,我认为它完全符合你的目的。
【参考方案1】:
好的,那你为什么要“回显我的密码”?
您不能使用NOPASSWD
将您的 SSH 帐户添加到 sudoers 文件吗?
来自man sudoers
:
authenticate If set, users must authenticate themselves via a password (or other means
of authentication) before they may run commands. This default may be
overridden via the PASSWD and NOPASSWD tags. This flag is on by default.
【讨论】:
我知道我可以在远程服务器上运行本地脚本,如下所示:serverfault.com/questions/617116/run-local-script-over-ssh 但在上面的示例中,允许对服务器进行 root 访问。在我的环境中不是。所以我需要用 sudo 运行我的本地脚本,只是想知道是否可以不分别为每个主机输入密码 好吧,我一开始没明白。我希望这可以解决您的问题。 我已经可以使用自己的用户无密码连接远程服务器。但root访问也不是su - 不允许。所以我需要找到一种方法来使用 sudo 运行我的本地脚本,而不是每次都输入我的 sudo 密码,因为我需要为超过 300 台服务器执行此操作。 这听起来正是 sudoers 中NOPASSWD
标签的目的。
@JavaRed sudoers 文件与ssh
没有任何关系。编辑它消除了为sudo
命令键入密码的需要。 (也就是说,完全消除对密码的需求可能是矫枉过正;您应该尝试将sudo
配置为仅在没有密码的情况下运行此特定命令。)以上是关于在远程服务器上以 root 身份运行本地脚本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
text Tramp格式:在远程主机上以root身份编辑文件(Emacs)
如何在 Debian 上以非 root 用户身份运行 Spring Boot 应用程序?