linux,SSH 远程执行任务或者执行sh文件

要使linux,SSH远程执行任务或者执行sh文件,必须让linuxSCP远程传输文件免密码。方法我就不说了,在我的前一篇文章。远程执行命令如果我们要查看一下某台主机的磁盘使用情况,是不是必须要登录到目标主机上才能执行df命令呢?当然不是的,我们可以使用ssh命令在远程的主机上执行df命令,然后直接把结果显示出来。

这两条命令虽然提示的失败原因不同,但它们有一个共同点:都需要与用户交互(需要TTY)。所以它们失败的原因也是相同的:默认情况下,当你执行不带命令的ssh连接时,会为你分配一个TTY。因为此时你应该是想要运行一个shell会话。但是当你通过ssh在远程主机上执行命令时,并不会为这个远程会话分配TTY。此时ssh会立即退出远程主机,所以需要交互的命令也随之结束。

作为总结,我们看看-t参数的官方解释:好吧,更强悍的是我们居然可以指定多个-t参数!执行多行的命令有时候我们可能需要随手写几行简单的逻辑,这也没有问题,ssh能轻松搞定!

你可以用单引号或双引号开头,然后写上几行命令,最后再用相同的引号来结束。那么如果需要在命令中使用引号该怎么办?其实针对类似的情况有一条比较通用的规则,就是混合使用单双引号。这条规则在这里也是适用的:

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

请注意上图中的最后一行,并没有输出我们期望的nick。这里多少有些诡异,因为如果变量没有被解释的话,输出的应该是$name才对。但是这里却什么都没有输出。对于引用变量的写法,可以通过下面的方式保证变量被正确解释:

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

通过重定向stdin,本地的脚本test.sh在远程服务器上被执行。接下来我们我期望能为脚本test.sh传递一个参数,为了验证传入的参数,在test.sh文件的末尾添加两行:echo$0echo$1然后尝试执行下面的命令:$sshnick@xxx.xxx.xxx.xxx$sshnick@xxx.xxx.xxx.xxx下图显示了执行的结果:

看来上面的方法都无法为脚本传递参数。要想在这种情况下(远程执行本地的脚本)执行带有参数的脚本,需要为bash指定-s参数:$sshnick@xxx.xxx.xxx.xxx'bash-s'

在上图的最后两行,输出的是执行远程服务器上的脚本除了执行本地的脚本,还有一种情况是脚本文件存放在远程服务器上,而我们需要远程的执行它!此时在远程服务器上用户nick的家目录中有一个脚本test.sh。文件的内容如下:lspwd执行下面的命令:$sshnick@xxx.xxx.xxx.xxx

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180708A0M2RK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券