SSH 远程执行任务

图片

SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操作自动化掉!下面就对 SSH 的远程操作功能进行一个小小的总结。

远程执行命令

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

$ ssh nick@xxx.xxx.xxx.xxx "df -h"

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

$ ssh nick@xxx.xxx.xxx.xxx "pwd; cat hello.txt"

第一条命令返回的结果:/home/nick
这说明用这种方式执行命令时的当前目录就是登陆用户的家目录。
第二条命令返回 hello.txt 文件的内容。
注意,当命令多于一个时最好用引号括起来,否则在有的系统中除了第一个命令,其它都是在本地执行的。

图片

执行需要交互的命令

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

$ ssh nick@xxx.xxx.xxx.xxx "sudo ls /root"
$ ssh nick@xxx.xxx.xxx.xxx "top"

图片

这两条命令虽然提示的失败原因不同,但它们有一个共同点:都需要与用户交互(需要 TTY)。所以它们失败的原因也是相同的:
默认情况下,当你执行不带命令的 ssh 连接时,会为你分配一个 TTY。因为此时你应该是想要运行一个 shell 会话。
但是当你通过 ssh 在远程主机上执行命令时,并不会为这个远程会话分配 TTY。此时 ssh 会立即退出远程主机,所以需要交互的命令也随之结束。
好在我们可以通过 -t 参数显式的告诉 ssh,我们需要一个 TTY 远程 shell 进行交互!
添加 -t 参数后,ssh 会保持登录状态,直到你退出需要交互的命令。

图片

作为总结,我们看看 -t 参数的官方解释:
"Force pseudo-terminal allocation.  This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services.  Multiple -t options force tty allocation, even if ssh has no local tty."
好吧,更强悍的是我们居然可以指定多个 -t 参数!

执行多行的命令

有时候我们可能需要随手写几行简单的逻辑,这也没有问题,ssh 能轻松搞定!

图片

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

图片

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

图片

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

图片

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

远程执行脚本

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

执行本地的脚本

我们在本地创建一个脚本文件 test.sh,内容为:

ls
pwd

然后运行下面的命令:

$ ssh nick@xxx.xxx.xxx.xxx < test.sh

图片

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

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

echo $0
echo $1

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

$ ssh nick@xxx.xxx.xxx.xxx < test.sh helloworld$ ssh nick@xxx.xxx.xxx.xxx < "test.sh helloworld"

下图显示了执行的结果:

图片

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

$ ssh nick@xxx.xxx.xxx.xxx 'bash -s' < test.sh helloworld

图片

在上图的最后两行,输出的是 "bash" 和 "helloworld" 分别对应 $0 和 $1。

执行远程服务器上的脚本

除了执行本地的脚本,还有一种情况是脚本文件存放在远程服务器上,而我们需要远程的执行它!
此时在远程服务器上用户 nick 的家目录中有一个脚本 test.sh。文件的内容如下:

ls
pwd

执行下面的命令:

$ ssh nick@xxx.xxx.xxx.xxx "/home/nick/test.sh"

图片

注意,此时需要指定脚本的绝对路径!

下面我们也尝试为脚本传递参数。在远程主机上的 test.sh 文件的末尾添加两行:

echo $0
echo $1

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

$ ssh nick@xxx.xxx.xxx.xxx /home/nick/test.sh helloworld

图片

真棒,最后两行 "/home/nick/test.sh" 和 "helloworld" 分别对应 $0 和 $1。

总结

本文通过 demo 演示了 ssh 远程操作的基本方式。这些基本用法将为我们在更复杂的场景中完成各种艰巨的任务打下基础。

  • 46
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
使用 JavaScript 编写的打砖块游戏(附源代码)   项目:JavaScript 打砖块游戏(附源代码) 打砖块游戏是使用 HTML5、CSS 和 JavaScript 开发的简单项目。这款游戏是关于借助弹跳球和滑动平面来打破障碍。您可以玩游戏,直到能够打破所有砖块而不会将球掉到地上。玩家必须使用箭头键移动滑动平面。 游戏制作 该项目仅包含 HTML、CSS 和 JavaScript。谈到这款游戏的功能,用户必须移动滑动平面以使球反弹回来以打破砖块。球必须接触砖块才能将其打破,并且不应掉落到地上。这款游戏的 PC 控制也很简单。您只需使用左、右、上、下键根据要求移动滑动平面即可。如果玩家能够在 3 次生命中清除所有砖块,则获胜。 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,单击 index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
### 回答1: 可以使用SSH连接到远程主机并执行shell脚本。命令格式如下: ``` ssh user@remote_host "command" ``` 其中,user是远程主机的用户名,remote_host是远程主机的地址,command是要在远程主机上执行的命令。 例如,执行远程主机上的脚本test.sh,命令如下: ``` ssh user@remote_host "bash /path/to/test.sh" ``` 如果你要执行的脚本文件在本地,还可以使用 ssh 连接远程服务器并将文件传输到远程服务器,然后再执行脚本。 ``` scp test.sh user@remote_host:/path/to/ ssh user@remote_host "bash /path/to/test.sh" ``` 需要注意的是,远程主机上的命令执行完成后,SSH会立即断开连接。如果需要保持连接,可以使用-t参数,例如: ``` ssh -t user@remote_host "bash /path/to/test.sh" ``` ### 回答2: SSH是一种用于远程登录和执行命令的网络协议。远程执行Shell脚本通过SSH连接到远程服务器并在服务器上执行Shell脚本。 要远程执行Shell脚本,首先需要安装和配置SSH服务器和客户端。然后,在本地计算机上使用SSH客户端连接到远程服务器。 连接到远程服务器后,可以使用SSH命令执行Shell脚本。要执行Shell脚本,可以使用以下命令: ssh username@remote_server 'bash -s' < script.sh 在上述命令中,`username`是远程服务器的用户名,`remote_server`是远程服务器的地址,`script.sh`是要执行的Shell脚本的文件名。 通过这个命令,SSH会将Shell脚本作为标准输入传递给远程服务器,并在远程服务器上使用Bash解释器执行脚本。执行完脚本后,结果将返回到本地计算机。 执行远程Shell脚本需要使用正确的用户名和密码来连接到远程服务器,确保远程服务器已经配置了正确的权限和路径。 总而言之,通过SSH远程连接到服务器,并使用SSH命令执行Shell脚本,可以在远程服务器上执行Shell脚本并获取结果。这是一种安全且方便的方法,适用于远程管理和自动化任务。 ### 回答3: SSH(Secure Socket Shell)是一种安全协议,用于远程登录和执行操作。要远程执行shell脚本,首先需要拥有远程主机的登录凭证和相应的权限。 使用SSH远程执行shell脚本可以通过以下步骤完成: 1. 在本地终端上打开SSH客户端工具(如OpenSSH),并输入登录远程主机的命令,形如:`ssh username@remote_host`。其中,`username`是远程主机的用户名,`remote_host`是远程主机的IP地址或域名。 2. 输入远程主机的登录密码,如果远程主机开启了公钥认证,也可以通过私钥进行身份验证。 3. 登录成功后,可以在终端上执行shell命令或运行shell脚本。要执行shell脚本,可以输入命令:`./script.sh`,其中`script.sh`是待执行的脚本文件名。 4. 执行shell脚本时可能需要输入一些参数或者确认操作,根据脚本的需要进行相应的输入。 5. 执行完成后,观察终端上的输出,可以查看脚本执行的结果。如果需要保存脚本执行结果,可以将输出重定向到一个文件中,命令形如:`./script.sh > output.txt`。 请注意,执行shell脚本需要确保远程主机上已经安装了所需的脚本执行环境和依赖,否则可能会出现脚本执行失败或无法正常运行的情况。 总之,通过SSH远程执行shell脚本可以方便地在远程主机上执行自定义的操作,从而实现远程管理和自动化部署等任务

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小晨Linux学习日记

感谢打赏 您的打赏是我更新动力

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

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

打赏作者

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

抵扣说明:

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

余额充值