【发布时间】: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 身份登录。
提前致谢
【问题讨论】: