Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 以根用户身份在远程计算机上以本地文件的形式无密码执行本地脚本_Linux_Bash_Ssh - Fatal编程技术网

Linux 以根用户身份在远程计算机上以本地文件的形式无密码执行本地脚本

Linux 以根用户身份在远程计算机上以本地文件的形式无密码执行本地脚本,linux,bash,ssh,Linux,Bash,Ssh,我一直在编写一个bash脚本,它可以在远程机器上自动运行某些脚本,并将日志保存到某些文件夹中。到目前为止,我一直在将本地脚本复制到远程计算机,将其执行到远程日志中,将远程日志复制到本地文件夹中,然后删除远程日志和脚本的远程副本 这是可行的,但我知道如果我能避免在两个步骤之间做所有的事情,它会工作得更好。一个警告是,我需要这是自动和无密码的(这意味着没有任何用户输入)。其中一个脚本需要以root用户身份运行,否则它将不会显示所有必要的信息,并将临时锁定计算机 下面是我当前用于将remoteScri

我一直在编写一个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
尤其是

sshpass -f password.txt ssh user@1.1.1.1 echo $password | sudo -S /home/user/script.sh >> log.txt
它仅在本地计算机上以root权限执行本地脚本

我尝试了上述命令的许多变体,我相信这是某种管道或流量问题,但我无法解决。有什么办法可以这样做吗

机器是Ubuntu16.04,您不能以root身份使用ssh

提前感谢

A)可能值得研究编排/配置管理解决方案(例如ansible)。一开始这是一个陡峭的学习曲线,但如果你管理多台服务器,最初的支出将在以后的几年中得到回报

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

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

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

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

cat/home/user/localScript.sh | sshuser@1.1.1.1“sudo bash”>log.txt

它以root用户身份在远程计算机上执行非交互式bashshell,它将接受在标准中执行的命令,并且标准输出将通过ssh通道返回,供您写入本地日志。 如果您也想要标准错误,请查看
&>
2>&1

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