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 远程操作的基本方式。这些基本用法将为我们在更复杂的场景中完成各种艰巨的任务打下基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/723070.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ThreeJS-截屏下载pdf或者图片时白屏

JS-页面截图下载为pdf 关于如何下载为 pdf 在上面的这篇文章中有写&#xff0c;大家可以看下&#xff0c;下载图片代码在最下面 这时我们发现 three 部分是空白的如下&#xff1a; 这就多少有点尴尬了&#xff0c;这时我们习惯性的看下后台报错 是不是发现了惊喜&#xff0c;…

操作系统 内存管理

实验目的&#xff1a; 理解虚拟内存在内存管理中的核心作用。掌握常见的内存分配回收算法思想。 实验内容&#xff1a; 编程模拟实现内存伙伴buddy分配器。 实验步骤&#xff1a; 1.理解Buddy分配算法原理&#xff1a; 在开始编码之前,先要深入理解Buddy分配算法的原理。…

Web应用安全测试-综合利用(二)

Web应用安全测试-综合利用&#xff08;二&#xff09; Host头攻击 漏洞描述 Web应用程序获取网站域名一般是依赖HTTP Host header&#xff08;比如在JSP里通过request.getHeader()获取&#xff09;&#xff0c;这里的header很多情况下是不可靠的。 攻击者恶意利用HTTP Host h…

小米HyperOS 澎湃os机型免答题 免社区等级 秒接bl锁操作步骤解析【二】

前面两期博文; 小米HyperOS 澎湃os机型免答题 免社区等级 秒接bl锁操作步骤解析 小米机型解锁bl 绕过社区等级5才可以解锁的限制的教程_没有五级社区怎么解锁bl-CSDN博客 小米对米粉解锁bl是越来越苛刻了。目前社区等级 答题 审核等等步骤越来越繁琐。而且通过率很低。知名开…

细说MCU输出互补型PWM波形时设置死区时间的作用

目录 一、工程背景 二、死区时间的作用 一、工程背景 在作者的文章里建立工程时&#xff0c;为配置输出互补型PWM波形曾经设置了死区时间&#xff0c;DEAD100个定时器的时间周期&#xff08;简称实例1&#xff09;&#xff1a;细说MCU输出互补型PWM波形的实现方法-CSDN博客 …

计算机行业的现状与未来之2024

年年都说编程好&#xff0c;编程工资涨不了。 人家骑车送外卖&#xff0c;月入两万好不好。 一、计算机专业的背景与现状 在过去几十年里&#xff0c;计算机科学相关专业一直是高考考生的热门选择。无论是计算机科学与技术、软件工程&#xff0c;还是人工智能与大数据&#xff…

数据链路层知识分享【计算机网络】【以太网帧 | MTU的影响 | ARP技术】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 前文 一&#xff0c; 以…

《算法笔记》总结No.2——模拟

一.简单模拟 考察代码能力&#xff0c;不涉及算法&#xff1a;一类题目怎么说你就怎么做的类型~ 巴音布鲁克比赛&#xff0c;以车队为基准评选冠军。业务要求是&#xff1a;第一行输入正整数N&#xff0c;代表车手的总个数&#xff1b;接下来的N行每行键入两个数字&#xff1a…

在同一个 Blazor 应用中结合 SQL-DB 和 MongoDB

介绍 传统上&#xff0c;在单应用程序中&#xff0c;我们对整个应用程序使用单个数据库服务器。但是&#xff0c;我将 SQL 数据库和 MongoDB 结合在同一个应用程序中。此应用程序将是 RDBMS 和 No SQL 数据库的组合。我们将从头开始创建一个 Blazor 应用程序&#xff0c;并使用…

全域外卖系统源码部署怎么做,外卖市场新机遇!

随着本地生活下半场的到来&#xff0c;全域外卖逐渐成为众多创业者关注的焦点&#xff0c;再加上抖音关于新增《【到家外卖】内容服务商开放准入公告》的意见征集通知&#xff08;以下简称“通知”&#xff09;的发布&#xff0c;更是将当前全域外卖赛道重点入局方式之一的全域…

《无与伦比》Centos7 扩容到已有逻辑卷

命令可以查找硬盘和分区情况 fdisk -l lsblk

MyBatis的配置文件,即:src->main->resources的配置

目录 1、properties 标签 1.1 mybatis-config.xml 1.2 db.properties 1.3 在SqlMapConfig.xml 中 引入数据库配置信息 2、typeAliases 标签 2.1 定义别名 2.2 使用别名 3、Mappers标签 作用&#xff1a;用来在核心配置文件中引入映射文件 引入方式&#xff0c;有以下…

RocketMQ源码学习笔记:源码启动NameServer,Broker

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview2、NameServer2.1、源码启动NameServer 3、Broker启动过程 1、Overview 这篇文章的源码的版本是release-4.9.8。在启动各个模块之前应该先对项目进行打包mvn install -Dmaven.te…

Ubuntu-24.04-live-server-amd64启用ssh

系列文章目录 Ubuntu-24.04-live-server-amd64安装界面中文版 Ubuntu安装qemu-guest-agent Ubuntu乌班图安装VIM文本编辑器工具 文章目录 系列文章目录前言一、输入安装命令二、使用私钥登录&#xff08;可选&#xff09;1.创建私钥2.生成三个文件说明3.将公钥复制到服务器 三…

Android面试题之App的启动流程和启动速度优化

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 App启动流程 ①点击桌面App图标&#xff0c;Launcher进程采用Binder IPC向system_server进程发起startActivity请求&#xff1b; ②system_se…

从零到一:Python自动化测试的详细指南!

引言&#xff1a; Python是一种功能强大且易于学习和使用的编程语言&#xff0c;它非常适合用于自动化测试。本文将从零开始&#xff0c;通过详细的步骤和规范&#xff0c;介绍如何在Python中实施高质量的自动化测试。我们将探讨测试策略的制定、测试框架的选择、测试用例的编…

【质量】软件系统数据质量管理过程(Word原件)

软件系统数据做数据质量管理至关重要&#xff0c;原因有四&#xff1a; 首先&#xff0c;数据质量直接影响软件系统的性能和用户体验。高质量的数据能够确保系统稳定运行&#xff0c;提供准确、可靠的信息支持&#xff0c;从而增强用户的满意度和信任度。 其次&#xff0c;数据…

国际导师上海面授大规模敏捷LeSS认证2024年8月22-24日开班 | 报名享特大福利

课堂互动练习 学员反馈 • “LeSS课我正经听过的有3次&#xff1b;两次Bas Vodde主讲&#xff0c;一次吕毅老师主讲。第一次应该是2015年&#xff0c;这门课中体现的对组织运作和产品开发底层逻辑的洞见令我折服。后来又陆续听了两次&#xff0c;每次都有更多体会。 我试着从一…

计算机网络:运输层 - TCP首部格式 连接的创建与释放

计算机网络&#xff1a;运输层 - TCP首部格式 & 连接的创建与释放 TCP首部格式源端口 目的端口序号确认号数据偏移保留控制位窗口检验和紧急指针 TCP连接创建 - 三次握手TCP传输过程TCP连接释放 - 四次挥手 TCP首部格式 TCP的首部如下&#xff1a; 首部的前20 byte是固定的…

ASM字节码操纵框架实现AOP

前言 使用ASM改写字节码实现Aop&#xff0c;是最快的Aop实现方式。 我猜你肯定懂AOP 凡是学习Spring框架&#xff0c;必然会深入了解AOP的原理以及实现。这里做下简单总结 Spring默认采取的是动态代理机制实现AOP&#xff0c;当动态代理不可用时&#xff08;代理类无接口&a…