本地执行脚本到远程

前言

SSH我们大家都不陌生,它是Linux下进行远程连接的基本工具,不单单可以登录,还可以远程操作。接下来我们来说一下怎么本地执行脚本到远程?没错!就是使用SSH。

日常工作中我们常常遇到在多个主机上远程部署,比如要在一台主机上写好shell脚本,执行脚本到远程主机。有两种方法:

1. 使用scp将本地脚本文件拷贝到远端,然后再通过ssh执行远端的脚本;(弊端是脚本修改后,每次都需要scp);
2. 直接在本地执行脚本到远程。

我们就说第二种方法了
一、 执行本地脚本

  1. 执行一个脚本到远程,我们用两个主机测试,主机1 IP:192.168.2.111 和主机2 IP:192.168.2.112
$ cat test.sh					//主机1上写一个简单脚本 获取当前主机IP
ifconfig | grep inet | awk -F "[: ]+" '{print $4}' | head -n1

$ sh test.sh					//本地执行一下
192.168.2.111					//获取到本机内网IP


重点来了!!执行本地脚本到远程的方法
$ ssh root@192.168.2.112 < test.sh
192.168.2.112					//在本地执行脚本获取到目标主机的IP

通过重定向 stdin,本地的脚本 test.sh 在远程服务器上被执行

  1. 为脚本传递参数
$ cat test2.sh 
echo $1
echo $2 

在本地执行结构如下:
$ sh test2.sh a b
a
b 

通过重定向远程执行,会报错
$ ssh root@10.153.195.138 < test2.sh a b
bash: a: command not found

要想在这种情况下(远程执行本地的脚本)执行带有参数的脚本,需要为 bash 指定 -s 参数:

$ ssh root@10.153.195.138 'bash -s' < test2.sh a b
a
b

二、 执行远程主机上的脚本
除了执行本地的脚本,还有情况是脚本文件存放在远程服务器上,而我们需要远程执行它。现在我们在主机2上创建test3.sh脚本,在主机1上远程执行。

$ cat test3.sh					//主机2中的脚本
ifconfig | grep inet | awk -F "[: ]+" '{print $4}' | head -n1

$ ssh root@192.168.2.112 sh /root/test3.sh	//主机1中去执行 (一定要是绝对路径去执行)
192.168.2.112

##传递参数
$ cat test4.sh					//主机2中的脚本
echo $1
echo $2

$ ssh root@192.168.2.112 sh /root/test4.sh aa bb	//主机1中传参数执行
aa
bb

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值