Linux之SSH远程执行多条命令

本文介绍了如何使用SSH在Linux系统中执行远程命令,包括一次执行多条命令、保存结果、执行本地和远程脚本,并详细阐述了如何为脚本传递参数以及在脚本中运行远程命令的方法。此外,还展示了如何在脚本中嵌套SSH命令来执行远程主机上的任务。

SSH 是 Linux 下进行远程连接的基本工具,不光可以登录,也可以远程操作。
一、执行简单的命令:
ssh root@127.0.0.1 "df -h"
一次执行多条命令,使用分号把不同的命令隔起来就 OK 了
ssh root@127.0.0.1 "df -h;pwd"
添加 -t 参数后,ssh 会保持登录状态,直到你退出需要交互的命令。
ssh -t root@127.0.0.1 "df -h"

二、保存远程执行命令结果:
赋值的方式:result=`ssh root@127.0.0.1 "df -h"`
追加到文件:ssh root@127.0.0.1 "df -h" >> ./log

三、执行本地的脚本
我们在本地创建一个脚本文件 test.sh:
然后运行下面的命令:
ssh root@127.0.0.1 < test.sh
通过重定向 stdin,本地的脚本 test.sh 在远程服务器上被执行。

该bash -s 命令的意思是“在新的 bash 会话中执行以下命令”。该-s 标志使其从标准输入读取,该< test.sh 位将本地脚本文件读入标准输入。该文件完全在本地读取,并且全部发送到远程服务器而无需上传任何内容。这确实需要您将所有命令放入一个单独的脚本文件中。


接下来我们期望能为脚本 test.sh 传递一个参数:
然后尝试执行下面的命令:
ssh root@127.0.0.1 < test.sh helloworld
ssh root@127.0.0.1 < "test.sh helloworld"
显示了执行的结果:方法都无法为脚本传递参数。
要想在这种情况下(远程执行本地的脚本)执行带有参数的脚本,需要为 bash 指定 -s 参数:
ssh root@127.0.0.1 'bash -s' < test.sh helloworld

在脚本中运行许多远程命令

如果您想在另一台服务器上运行 shell 脚本的一部分,而不是全部,您可以在脚本中包含如下嵌套块:

ssh user@remotehost 'bash -s' <<'ENDSSH'
  # The following commands run on the remote host
  echo "test"
  cd /home/
  pwd
ENDSSH

这是有效的,因为bash -s 期待任何类型的标准输入。该<<‘ENDSSH’ 指令创建了一个“here-document”结构,基本上将它和结尾“ENDSSH”之间的所有字符传递给标准输入,从而通过 SSH 传递给远程主机。

这样做意味着您可以将所有内容保存在一个脚本文件中,而不是创建一个新的脚本文件以在远程运行。

四、执行远程服务器上的脚本
除了执行本地的脚本,还有一种情况是脚本文件存放在远程服务器上,而我们需要远程的执行它!
此时在远程服务器中有一个脚本 test.sh。文件的内容如下:
执行下面的命令:
ssh root@127.0.0.1 "/home/test.sh"
注意,此时需要指定脚本的绝对路径!
下面我们也尝试为脚本传递参数:
然后尝试执行下面的命令:
ssh root@127.0.0.1 /home/test.sh helloworld
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕城南风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值