【问题标题】:Passwordless execution of local script on remote machine as root into a local file在远程机器上以 root 身份在本地文件中无密码执行本地脚本
【发布时间】:2020-12-28 07:31:05
【问题描述】:

我一直在研究一个 bash 脚本,它可以在远程机器上自动运行某些脚本并将日志保存到某些文件夹中。目前我一直在将本地脚本复制到远程机器,执行到远程日志中,将远程日志复制到本地文件夹,然后删除远程日志和远程脚本的副本。

这行得通,但我知道如果我可以避免在步骤之间进行所有操作,它会更好地工作。一个警告是我需要它是自动和无密码的(意味着根本没有用户输入)。其中一个脚本需要以 root 身份运行,否则它不会显示所有必要的信息,并且会暂时锁定机器。

下面是我当前用于将 remoteScript 执行到稍后使用 scp 检索的日志中的代码。

sshpass -f password.txt ssh user@1.1.1.1 "echo $password | sudo -S /home/user/remoteScript.sh > remoteLog.txt"

在我的测试中,将远程机器上的本地脚本执行到本地日志文件中,如下所示

sshpass -f password.txt ssh user@1.1.1.1 "bash -s" < /home/user/localScript.sh >> localLog.txt

如何结合上面两个代码示例的元素,以使本地脚本在具有 root 权限的远程计算机上运行并将输出记录到本地文本文件中?

我尝试过的一些不起作用的方法包括:

sshpass -f password.txt ssh user@1.1.1.1 "bash -s" < "echo $password | sudo -S /home/user/script.sh >> log.txt"
sshpass -f password.txt ssh user@1.1.1.1 "echo $password | sudo -S /home/user/script.sh" >> log.txt

特别是

sshpass -f password.txt ssh user@1.1.1.1 echo $password | sudo -S /home/user/script.sh >> log.txt

它只是在本地机器上以root权限执行本地脚本。

我已经尝试了上述命令的许多变体,我相信这是某种管道或流量问题,但我无法弄清楚。有没有办法做到这一点?

机器是 Ubuntu 16.04,您不能以 root 身份登录。

提前致谢

【问题讨论】:

    标签: linux bash ssh


    【解决方案1】:

    A) 可能值得研究编排/配置管理解决方案(例如 ansible)。起初这是一个陡峭的学习曲线,但如果您要管理多台服务器,那么初期的支出将会得到回报。

    B) 为您要执行的脚本设置无密码 sudo,这样您就不必以明文形式传递密码,并且无需任何输入即可运行。在 sudoers 中:

    user ALL=(ALL) NOPASSWD:/home/user/script.sh

    C) 设置 SSH 密钥,因此您根本不需要使用密码。

    但简而言之,您要查找的代码类似于:

    cat /home/user/localScript.sh | ssh user@1.1.1.1 "sudo bash" &gt; log.txt

    它在远程机器上以 root 身份执行非交互式 bash shell,它将接受在标准输入上执行的命令,标准输出将通过 ssh 通道返回,供您写入本地日志。 如果您也需要标准错误,请查看 &amp;&gt;2&gt;&amp;1

    【讨论】:

      猜你喜欢
      • 2014-03-23
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      相关资源
      最近更新 更多