在远程服务器上以 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" &gt;&gt; /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 应用程序?

如何在 Heroku 上以 root 身份运行?

以 root 身份运行结构脚本

如何在 Linux 机器上以 root 用户身份运行 Elasticsearch 2.1.1

如何在官方 docker php 映像上以非 root 用户身份运行 composer