【linux】ssh 远程执行命令

2023-11-09

在这里插入图片描述

1.概述

转载并且补充:ssh 远程执行命令

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

2.远程执行命令

如果我们要查看一下某台主机的磁盘使用情况,是不是必须要登录到目标主机上才能执行 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 文件的内容。

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

2.1 执行需要交互的命令

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

$ 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 参数!

2.2 执行多行的命令

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

2.3 远程执行脚本

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

2.4 执行本地的脚本

我们在本地创建一个脚本文件 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。

2.5 执行远程服务器上的脚本

除了执行本地的脚本,还有一种情况是脚本文件存放在远程服务器上,而我们需要远程的执行它!
此时在远程服务器上用户 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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【linux】ssh 远程执行命令 的相关文章

  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • 强制卸载 NFS 安装目录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 使用 paramiko 运行 Sudo 命令

    我正在尝试执行sudo使用 python paramiko 在远程计算机上运行命令 我尝试了这段代码 import paramiko ssh paramiko SSHClient ssh set missing host key polic
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 使用 grep 查找包含所有搜索字符串的行

    我有一个文件 其中包含很多与此类似的行 id 2796 some model Profile message type MODEL SAVE fields account 14 address null modification times
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • Ansible bitbucket 克隆存储库配置 ssh 错误

    我之前发布过这个问题 但那里的答案不再有效 总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 权限被拒绝 公钥 然而 如果
  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • Linux 内核标识符中前导和尾随下划线的含义是什么?

    我不断遇到一些小约定 比如 KERNEL Are the 在这种情况下 是内核开发人员使用的命名约定 还是以这种方式命名宏的语法特定原因 整个代码中有很多这样的例子 例如 某些函数和变量以 甚至 这有什么具体原因吗 它似乎被广泛使用 我只需
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的

随机推荐

  • YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析

    前言 前面简单介绍了YOLOv5的网络结构和创新点 直通车 YOLO系列 YOLOv5超详细解读 网络详解 在接下来我们会进入到YOLOv5更深一步的学习 首先从源码解读开始 因为我是纯小白 刚开始下载完源码时真的一脸懵 所以就先从最基础的
  • 高级实战案例:Python反反爬之JavaScript混淆

    写在前面 很早之前在吾爱破解论坛上看见了 猿人学 Web端爬虫攻防大赛 当时进入他们官网的时候 比赛已经结束了 看着那些题目还挺有意思的 但由于各种原因一直没有机会去做那些题目 最近比较闲 就去把猿人学官网打开看了一下 尝试着完成了第一道题
  • 输入框不能输入空格

    就酱 yourInputValue indexOf gt 0 复制代码 转载于 https juejin im post 5a39da775188256970782058
  • Jenkins+webhooks-多分支参数化构建-

    Jenkins webhooks 多分支参数化构建 需求 我这里是因为公司有个静态资源 构建完成是需要放在nginx的发布目录 但是每次手动构建不是很方便 我这里配置的是webhook更新代码触发自动构建 但是我们环境又分为正式环境跟测试环
  • 关于AF_INET和PF_INET

    AF 表示ADDRESS FAMILY 地址族 PF 表示PROTOCL FAMILY 协议族 Winsock2 h中 define AF INET 0 define PF INET AF INET 所以在windows中AF INET与P
  • Error in readRDS(dest) : error reading from connection

    Error in readRDS dest error reading from connection 解决办法 可能是镜像设置错误 导致无法抓取文件 修改 RStudio 中的镜像地址 设置成功后再运行成功 转载于 https www c
  • glip, glipv2介绍

    clip是使用 描述图片的句子 和 图片分类 作为一组输入来训练网络 glip是使用 描述图片的句子 和 图片检测任务 作为一组输入来训练网络 clip使用4亿对 glip使用27milliion 3M人工标定 24M网络爬 glipv2比
  • 菜刀连接图片一句话木马

    1 先制作图片一句话木马 找好一张图片如 fox jpg 并且准备好一句话脚本php文件fox php 在图片所在文件夹打开cmd命令行 执行命令 copy fox jpg b fox php a fox1 jpg 生成图片一句话文件fox
  • windows7 防火墙关于文件共享的设置

    WIN7自带防火墙的设置相较XP下有了较大的变化 近日在设置文件夹共享上遇到了一些小问题 后来解决了 过程如下 首先 在文件夹上右键 属性 共享 里 高级共享 共享此文件夹 然后给Everyone用户以读的权限 这一步和在XP下没什么区别
  • BigDecimal 前后端交互失去精度

    在Controller层通过 ResponseBody将返回数据自动转换成json时 不做任何处理 而直接传给前端的话 在BigDecimal长度大于17位 不包括小数点 会出现精度丢失 在Long长度大于17位时也会出现精度丢失的问题 解
  • C语言实现字典树

    leetcode 208的代码 include
  • 商用密码应用安全性评估测评过程指南_商用密码应用安全性评估的具体评估内容...

    如何合规 正确 有效使用商用密码 充分发挥商用密码在保障网络空间安全中的核心技术和基础支撑作用 关乎国家大局 关乎网络空间安全 关乎用户个人隐私 因此 要在保证商用密码应用大力推进和普及的同时 做好网络与信息系统的商用密码应用安全性评估 确
  • 前端系列之JavaScript(BOM对象)

    什么是BOM BOM browser object model 浏览器对象模型 window对象 全局对象 说明 所有的全局变量和全局方法都被归为window上
  • Mysql日期格式转化问题

    MySQL索引优化 MySQL慢查询优化 一文详解MySQL各种锁及MVCC的使用场景及原理 最近遇到一个需求 大致内容是查询近七天内所有设备每天的工作时间和 里面涉及到日期格式转化 子查询 分组查询等问题 较为复杂 以此记录 数据库内容
  • OpenCV-Python图像直方图计算calcHist函数详解、示例及图形呈现

    前往老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 在前面几篇直方图相关的文章中介绍了直方图均衡 直方图匹配 局部直方图处理 基于直方图统计信息进行图像增强处理等图像处理与直方图相关的
  • 【面试系列】对称二叉树

    题意 原题链接 代码 Definition for a binary tree node struct TreeNode int val TreeNode left TreeNode right TreeNode val 0 left nu
  • Java集合之NavigableMap与NavigableSet接口

    author lidx 本文接着上篇介绍SortedMap和SortedSet接口 介绍他们的扩展接口NavigableMap与NavigableSet接口 提供了针对给定搜索目标返回最接近匹配项的导航方法 SortedMap和Sorted
  • java.io.IOException: Invalid header signature; rea

    异常 java io IOException Invalid header signature read 4503608217567241 expected 2226271756974174256 資料來源 http hi baidu co
  • 基于SkyWalking实现SpringBoot在K8S中的链路跟踪实践

    一 安装SkyWalking服务 1 下载SkyWalking APM https skywalking apache org downloads 这里下载Distribution的v9 0 0版本tar并解压 2 进入bin目录分别启动o
  • 【linux】ssh 远程执行命令

    1 概述 转载并且补充 ssh 远程执行命令 SSH 是 Linux 下进行远程连接的基本工具 但是如果仅仅用它来登录那可是太浪费啦 SSH 命令可是完成远程操作的神器啊 借助它我们可以把很多的远程操作自动化掉 下面就对 SSH 的远程操作