Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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 如何通过ssh运行本地脚本_Linux_Shell_Server - Fatal编程技术网

Linux 如何通过ssh运行本地脚本

Linux 如何通过ssh运行本地脚本,linux,shell,server,Linux,Shell,Server,我尝试通过ssh运行本地脚本 ssh $HOST < script.sh ssh$HOST

我尝试通过ssh运行本地脚本

ssh $HOST < script.sh
ssh$HOST
我试过了

ssh -t $HOST "sudo -s && bash" < script.sh
ssh-t$HOST“sudo-s&&bash”

实际上,我在谷歌搜索了很多,找到了一些类似的问题,但是,我没有找到一个可以运行本地脚本的解决方案。

首先,将你的目标分为两部分。1) ssh连接到主机。2) 以sudo的形式运行所需的命令。在确定1)可以访问主机和2)具有sudo权限后,您可以使用
&&
组合这两个命令。
x_cmd&&y_cmd
所做的是在
x_cmd
成功退出后执行
y_cmd

正在读取的错误消息

$ ssh -t $HOST "sudo -s && bash" < script.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
解决问题的另一种方法是在非交互模式下使用
sudo
-n
,但为此,您需要在远程机器的sudoers文件中为执行用户设置
NOPASSWD
。然后你可以用

ssh $HOST "sudo -n -s bash" < script.sh
ssh$HOST“sudo-n-sbash”
为了使Edward Itrich的答案更具可扩展性并适合频繁使用,您可以设置一个系统,在该系统中只运行一行脚本,该脚本可以通过以下方式快速移植到任何主机、文件或命令:

如果您有脚本目录,请通过更改脚本的名称在脚本目录中创建脚本(我经常使用此格式更改脚本名称的1个单词,并创建文件、设置权限和打开以进行编辑):

newscript=“runlocalscriptonremotehost.sh”
触摸$newscript&&chmod+x$newscript&&nano$newscript
在nano中,按如下方式填写脚本,将要远程运行的脚本的目录和名称信息放在runLocalScriptionRemoteHost.sh的变量行中(只需要编辑第1-3行):

HOSTtoCONTROL=”sudoadmin@192.168.0.254"
PATHtoSCRIPT=“/home/username/Scripts/”
SCRIPTname=“scripttorunremotely.sh”
scp$PATHtoSCRIPT$SCRIPTname$HOSTtoCONTROL:/tmp/&&ssh-t$HOSTtoCONTROL“sudo-s bash/tmp/$SCRIPTname”
然后运行:

sh./runlocalscriptonremotehost.sh

保持RunLocalScriptionRemoteHost.sh在选项卡式文本编辑器中处于打开状态以进行快速更新,继续为脚本创建bash别名,您就拥有了此常用操作的应用程序化版本。

这可能是一个很好的后续答案。
ssh $HOST "sudo -n -s bash" < script.sh