SSH如何远程执行任务

  介绍

这篇文章主要介绍SSH如何远程执行任务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

<强>远程执行命令

如果我们要查看一下某台主机的磁盘使用情况,是不是必须要登录到目标主机上才能执行df命令呢?当然不是的,我们可以使用SSH命令在远程的主机上执行df命令,然后直接把结果显示出来,整个过程就像是在本地执行了一条命令一样:

,美元ssh  nick@xxx.xxx.xxx.xxx “df  -h"

那么如何一次执行多条命令呢?其实也很简单,使用分号把不同的命令隔起来就好了:

,美元ssh  nick@xxx.xxx.xxx.xxx “pwd;, cat  hello.txt"

第一条命令返回的结果:/home/nick

这说明用这种方式执行命令时的当前目录就是登陆用户的家目录。

第二条命令返回你好。txt文件的内容。

注意,当命令多于一个时最好用引号括起来,否则在有的系统中除了第一个命令,其它都是在本地执行的。

 SSH如何远程执行任务

<强>执行需要交互的命令

有时候我们需要远程执行一些有交互操作的命令。

,美元ssh  nick@xxx.xxx.xxx.xxx “sudo  ls /root"   美元,ssh  nick@xxx.xxx.xxx.xxx “top"

 SSH如何远程执行任务

这两条命令虽然提示的失败原因不同,但它们有一个共同点:都需要与用户交互(需要TTY)。所以它们失败的原因也是相同的:
默认情况下,当你执行不带命令的SSH连接时,会为你分配一个TTY。因为此时你应该是想要运行一个shell会话。

但是当你通过SSH在远程主机上执行命令时,并不会为这个远程会话分配TTY。此时SSH会立即退出远程主机,所以需要交互的命令也随之结束。

好在我们可以通过- t参数显式的告诉SSH,我们需要一个遥控远程壳进行交互!

添加- t参数后,SSH会保持登录状态,直到你退出需要交互的命令。

 SSH如何远程执行任务

作为总结,我们看看- t参数的官方解释:

“力伪终端分配又是;这可以用于执行任意基于屏幕的程序alt=" SSH如何远程执行任务">

你可以用单引号或双引号开的头,然后写上几行命令,最后再用相同的引号来结束。

那么如果需要在命令中使用引号该怎么办?

其实针对类似的情况有一条比较通用的规则,就是混合使用单双引号。这条规则在这里也是适用的:

 SSH如何远程执行任务

当我们在命令中引用了变量时会怎么样呢?

 SSH如何远程执行任务

请注意上图中的最后一行,并没有输出我们期望的尼克。这里多少有些诡异,因为如果变量没有被解释的话,输出的应该是美元的名字才对。但是这里却什么都没有输出。

对于引用变量的写法,可以通过下面的方式保证变量被正确解释:

 SSH如何远程执行任务

注意,我们在上图的命令中为bash指定了- c参数。

<强>远程执行脚本

对于要完成一些复杂功能的场景,如果是仅仅能执行几个命令的话,简直是弱爆了。我们可能需要写长篇累牍的shell脚本去完成某项使命!此时SSH依然是不辱使命的好帮手(哈哈,前面的内容仅仅是开胃菜啊!)。

<强>执行本地的脚本

我们在本地创建一个脚本文件测试。sh,内容为:

ls   pwd

然后运行下面的命令:

,美元ssh  nick@xxx.xxx.xxx.xxx  & lt;测试。sh

 SSH如何远程执行任务

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

接下来我们我期望能为脚本测试。上海传递一个参数,为了验证传入的参数,在测试。上海文件的末尾添加两行:

echo  0美元   echo  1美元

然后尝试执行下面的命令:

SSH如何远程执行任务