0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SSH远程操作的基本方式

马哥Linux运维 来源:博客园sparkdev 2024-11-11 11:15 次阅读

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 文件的内容。
注意,当命令多于一个时最好用引号括起来,否则在有的系统中除了第一个命令,其它都是在本地执行的。

198ba906-9061-11ef-a511-92fbcf53809c.png

执行需要交互的命令

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

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

1997673c-9061-11ef-a511-92fbcf53809c.png

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

19bbf304-9061-11ef-a511-92fbcf53809c.png

作为总结,我们看看 -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 能轻松搞定!

19d2d2f4-9061-11ef-a511-92fbcf53809c.png

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

19eb956e-9061-11ef-a511-92fbcf53809c.png

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

1a088a70-9061-11ef-a511-92fbcf53809c.png

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

1a28ee5a-9061-11ef-a511-92fbcf53809c.png

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

远程执行脚本

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

执行本地的脚本

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

ls
pwd

然后运行下面的命令:

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

1a3d5e62-9061-11ef-a511-92fbcf53809c.png

通过重定向 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"

下图显示了执行的结果:

1a5eda2e-9061-11ef-a511-92fbcf53809c.png

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

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

1a74190c-9061-11ef-a511-92fbcf53809c.png

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

执行远程服务器上的脚本

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

ls
pwd

执行下面的命令:

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

1a82a31e-9061-11ef-a511-92fbcf53809c.png

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

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

echo $0
echo $1

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

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

1a9bcdbc-9061-11ef-a511-92fbcf53809c.png

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

总结

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

链接:https://www.cnblogs.com/sparkdev/p/6842805.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208872
  • 磁盘
    +关注

    关注

    1

    文章

    365

    浏览量

    25173
  • 命令
    +关注

    关注

    5

    文章

    678

    浏览量

    21981
  • SSH
    SSH
    +关注

    关注

    0

    文章

    185

    浏览量

    16296

原文标题:SSH 远程执行任务

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【龙芯2K0300蜂鸟板试用】远程SSH登录问题解决

    首先说下,一般linux开发板ssh远程登录是很基本的操作,因为更新程序,下载配置都需要这个步骤,但是按照常规操作,龙芯蜂鸟开发板死活ssh
    发表于 08-12 22:16

    如何使用SSH远程命令登录香橙派开发板

    地址为了远程登录香橙派开发板,首先需要获取开发板的 IP 地址。我们可以通过串口来查看。3.使用 ssh 远程登录香橙派开发板3.1使用 xshell 新建一个 ssh 连接名称:输
    发表于 05-22 17:16

    怎样去搭建一种Window SSH远程开发环境

    - SSH 插件点击左下角的远程窗口,选择 Connect to Host按照提示完成操作即可享受远程开发效果图Jetbrains使用此远程
    发表于 09-19 16:31

    如何使用ssh远程登录虚拟机?

    我pc上安装的虚拟机和pc可以互相ping通,但是使用ssh远程登录时,不用名输入root或forlinx,都不能远程登录,请问该怎么实现远程登录?PS:我是用的是飞凌提供的虚拟机,在
    发表于 11-25 06:15

    【触觉智能 Purple Pi OH 开发板体验】无网络状态连接ssh解决办法

    工具,用户可以图形化地输入目标主机的地址和登录凭证,实现SSH连接。 SSH密钥认证: 使用SSH密钥对进行连接是一种更安全的方式。用户需要生成公钥和私钥,并将公钥添加到
    发表于 08-20 12:38

    设置面向LSF 和SSH远程服务器群设备

    使用 DSE II 在 Quartus Prime 中设置面向 LSF 和SSH远程服务器群设备
    的头像 发表于 06-22 04:37 4195次阅读
    设置面向LSF 和<b class='flag-5'>SSH</b> 的<b class='flag-5'>远程</b>服务器群设备

    如何配置锐捷SSH远程登陆?

    华为交换机配置Telnet远程登陆,有很多朋友就问到了关于ssh远程登陆的方法,现在telnet 的远程登录方式企业用的不多,
    的头像 发表于 03-21 11:07 1.4w次阅读

    【米尔MYD-J1028X开发板试用体验】实现SSH远程登录,系统测评

    本文来源电子发烧友社区,作者:mameng, 帖子地址: https://bbs.elecfans.com/jishu_2308785_1_1.html   开发板 默认没有开启SSH远程登录
    的头像 发表于 10-25 11:24 1095次阅读
    【米尔MYD-J1028X开发板试用体验】实现<b class='flag-5'>SSH</b><b class='flag-5'>远程</b>登录,系统测评

    SSH第3部分:配置SSH反向隧道以减少暴露的端口

    命令行工具安全外壳 (SSH) 在客户端和服务器之间提供安全的通信通道。工程师和操作员经常使用 SSH 远程管理他们的设备和主机。例如,通常使用 S
    的头像 发表于 01-03 09:45 2890次阅读
    <b class='flag-5'>SSH</b>第3部分:配置<b class='flag-5'>SSH</b>反向隧道以减少暴露的端口

    SSH第1部分:配置SSH以安全连接到远程设备

    Secure Shell (SSH) 协议通常用于远程管理,因为它在客户端和远程设备之间提供加密连接,并在两个系统之间启用加密的双向通信路径。几十年来,开发人员一直依靠 SSH 协议与
    的头像 发表于 01-03 09:45 1214次阅读

    SSH命令详解

    ssh是一种安全的远程登录及传输协议。ssh可用于远程登录、远程文件传输等。ssh是安全的she
    的头像 发表于 06-02 10:00 1.7w次阅读
    <b class='flag-5'>SSH</b>命令详解

    SSH/Telnet设备远程登录方式实际综合运用

    SSH和Telnet都是远程连接控制协议,在网络技术的应用中常被用于远程连接控制路由器和交换机,方便工程师远程对设备进行运营维护。
    发表于 06-11 09:12 1205次阅读
    <b class='flag-5'>SSH</b>/Telnet设备<b class='flag-5'>远程</b>登录<b class='flag-5'>方式</b>实际综合运用

    如何配置交换机SSH远程登录?

    如何配置交换机SSH远程登录,本期我们就来了解下ssh远程登陆的方式,以锐捷交换机为例。
    的头像 发表于 08-02 09:35 3591次阅读
    如何配置交换机<b class='flag-5'>SSH</b><b class='flag-5'>远程</b>登录?

    远程数据容灾方式类型与操作

    电子发烧友网站提供《远程数据容灾方式类型与操作.doc》资料免费下载
    发表于 10-25 09:52 0次下载
    <b class='flag-5'>远程</b>数据容灾<b class='flag-5'>方式</b>类型与<b class='flag-5'>操作</b>

    SSH端口号是什么?SSH是如何工作的?

    SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录或文件传输方式,例如Telnet、FTP,使用明文传输数据,存在很多
    的头像 发表于 11-10 10:06 2653次阅读
    <b class='flag-5'>SSH</b>端口号是什么?<b class='flag-5'>SSH</b>是如何工作的?