在远程服务器上执行本地的shell脚本

2023-11-12

1 使用ssh实现

ssh user@hostname -C "/bin/bash" < test.sh

2 使用expect实现

采用的策略就是先在本地通过expect把shell脚本推送到远程服务器上,之后再用expect模拟登录之后,先给远程的shell脚本权限,然后再执行脚本,
最后删除脚本就ok啦!PS:在expect和控制台交互的时候我设置的timeout时间是1s,如果执行的shell脚本时间比较长的话,timeout应该大于shell脚本的时长

下面是expect脚本的代码:

#!/home/map/.jumbo/bin/expect
   set serverPwd [lindex $argv 0] #服务器密码
   set serverIp [lindex $argv 1] #服务器IP
   set address [lindex $argv 2]  #服务器存放路径
   set file [lindex $argv 3] #脚本名
   set timeout 5 #手动设置与控制台交互的时间
   #将shell脚本推送到远程服务器
   spawn scp $file $serverIp:$address
   expect {
      "*yes/no*" {send "yes\r"; exp_continue}
      "*password:" {send "$serverPwd\r"; exp_continue}
      "*Password:" {send "$serverPwd\r"}
   }
   #登录远程服务器
   spawn  ssh $serverIp
   expect {
      "*yes/no*" {send "yes\r"; exp_continue}
      "*password:" {send "$serverPwd\r"; exp_continue}
      "*Password:" {send "$serverPwd\r"}
   }
   expect "#"
   #给shell脚本添加权限
   send "chmod a+x $address$file\r"
   expect "#"
   #执行shell脚本
   send "$address$file $address\r"
   expect "#"
   #删除远程服务器上的shell脚本
   send "rm $address$file\r"
   expect "#"
   #退出
   send "exit\r"
   expect eof
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在远程服务器上执行本地的shell脚本 的相关文章

  • 比较linux中的两个未排序列表,列出第二个文件中的唯一项

    我有 2 个包含号码列表 电话号码 的文件 我正在寻找一种列出第二个文件中第一个文件中不存在的数字的方法 我尝试过各种方法 comm getting some weird sorting errors fgrep v x f second
  • 如何使用 bash 中提供的工具生成一系列非周末日期?

    我想生成一个文件列表 其中名称包含 filename date 例如file 20111101 file 20120703 开始November 1 2011直到今天 应该不包括周末 Thanks 2011年试试这个 for y in 20
  • 使用 grep 查找所有匹配的模式

    In txt1 S01A1P2 S01A1P5 S01A1P4 In txt2 data train wave S01A1P3 mfc data train wave S01A1P7 mfc data train wave S01A1P8
  • PHP exec rm -Rf 不适用于子目录

    我试图删除特定文件夹中的所有内容 但它似乎不会影响子文件夹 但它应该 因为 bash 命令是从控制台执行的 system rm Rf some dir 该命令中不需要星号 如果要与文件一起删除目录 请同时删除斜杠 留下斜杠将删除文件 但保留
  • adb shell 输入带有空格的文本

    如何发送带有空格的文本 例如 一些文字 using adb shell input text 找到以下解决方案 adb shell input text some stext 工作正常 但是有什么简单的方法可以用 s 替换空格吗 Examp
  • tcsh 脚本 if 语句

    我需要循环遍历一堆不同的场景 变量场景 但无法弄清楚如何在 tcsh shell 脚本中使用 if 语句 收到错误 if 表达式语法 有人可以告诉我我有什么问题吗 简化代码如下 谢谢 bin tcsh f set val 0 foreach
  • 通过 Node.js 运行 bash 脚本 - 非法选项 -o pipelinefail

    我正在尝试使用 Node js 执行 bash 脚本child process exec 然而它在文件的第二行爆炸 usr bin env bash set eo pipefail TRACE set x echo we are here
  • Ruby 在特定目录中运行 shell 命令

    我知道如何在 Ruby 中运行 shell 命令 例如 x cmd 但是 如何指定运行此命令的目录 有没有类似的脱壳方式 类似subprocess Popen在Python中 subprocess Popen r c mytool tool
  • shell脚本中是否有互斥/信号量机制?

    我正在 shell 脚本中寻找互斥 信号量 并发机制 考虑以下情况 除非 a 用户不关闭共享文件 否则 b 用户应该无法打开 更新它 我只是想知道如何在 shell 脚本中实现互斥量 信号量 临界区等 在 shell 脚本中实现锁定机制 文
  • 编写一个 shell 脚本,find-greps 并在 1 行中输出文件名和内容

    要查看所有包含 abc 的 php 文件 我可以使用这个简单的脚本 find name php exec grep l abc 我可以省略 l 并且提取部分内容而不是文件名作为结果 find name php exec grep abc 我
  • ubuntu 中的 echo -e 选项不起作用

    我的同事使用Ubuntu 我使用openSUSE 我们使用相同的makefile编译相同的源代码 我的环境运行良好 但我的同事不能 总是输出无法识别 e选项 我们检查makefile 只发现echo命令使用 e option Ubuntu的
  • Linux shell 标题大小写

    我正在编写一个 shell 脚本并有一个如下所示的变量 something that is hyphenated 我需要在脚本中的各个点使用它 如下所示 something that is hyphenated somethingthati
  • 如何从正则表达式中获取所有匹配项?

    我想获得所有出现的情况 0 9A Z 以供稍后处理 我有 if cat file 0 9A Z then echo BASH REMATCH fi 这给了我第一个匹配项 但是我如何处理文件中的所有匹配项 谢谢 如果您只想获取正则表达式的匹配
  • 终止 ssh 会话会终止正在运行的进程

    我正在使用 ssh 连接到我的 ubuntu 服务器 我使用命令启动编码程序 然而 似乎当我的 ssh 会话关闭时 因为我在进入睡眠状态的笔记本电脑上启动它 有没有办法避免这种情况 当然 阻止我的笔记本电脑休眠并不是永久的解决方案 运行你的
  • bash 脚本中的未绑定变量

    在调试我的脚本时 我变得绝望 我使用了我的高级同事向我推荐的一些结构 但我不知道如何使其正常工作 bin bash x set ueo pipefail exec gt tmp dq log source BASH SOURCE env p
  • 为什么 ls -l 中的“总计”加起来不等于列出的总文件大小? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为什么是total在输出中ls l打印为64并不是26078列出的所有文件的总数是多少 ls l test ls total 64 rw
  • 如何输入带有空格的路径?

    我有一个主文件 它使用 从主文件我做一个源 一个带有指向路径的变量的属性文件 属性文件如下所示 TMP PATH COMPANY someProject tmp OUTPUT PATH COMPANY someProject output
  • 我收到错误“array.sh:3:array.sh:语法错误:”(“意外”

    我编写了以下代码 bin bash Simple array array 1 2 3 4 5 echo array 我收到错误 array sh 3 array sh 语法错误 意外 根据我从 Google 了解到的情况 这可能是因为 Ub
  • 从编译的二进制文件创建 RPM 规范文件

    环境是AIX 7 0 RPM版本3 0 5 我对 Unix 世界很陌生 请耐心等待我的无知 我们有 3 种不同类型的文件要打包为 RPM Source binary bainary 文件 大约 160 个 Source ui mm 文件数量
  • Linux 从设备本身运行的脚本卸载设备

    我在路径中安装了一个 iso 映像 mnt iso 在这个 iso 中我有一个安装脚本 install sh 我从 iso 运行安装脚本 最后脚本询问用户是否要卸载 iso 本身 如果用户按 y 脚本将执行以下代码 cd umount mn

随机推荐

  • Android代码通过包名调用系统卸载程序

    卸载指定包名的应用 param packageName public boolean uninstall String packageName boolean b checkApplication packageName Logger d
  • Mongodb 锁

    MMAP1存储引擎 collection锁 collection level concurrency control 在MMAP版本中 只提供了database的锁 既当一个用户对一个collection进行操作时 其他的collectio
  • 《Kubernetes故障篇:had untolerated taint node.kubernetes.io/not-ready》

    一 环境信息 操作系统 K8S版本 containerd版本 Centos7 6 v1 24 17 v1 6 12 二 背景信息 部署完K8S集群后 使用如下命令测试集群 进入pod中发现无法解析k8s默认域名和无法ping通外网 宿主机主
  • SWUST OJ#1103(数据结构之删除顺序表中指定区间的数据)

    目录 题目 思路 代码 题目 题目描述 建立顺序表L 将指定区间的数据从顺序表中删除 假设指定区间是合法数据 无序做合法性判断 测试数据为整型 输入 第一行是表长n 第二行是表中数据元素 第三行是闭区间 输出 删除以后的顺序表中的数据元素
  • Unable to find a single main class from the following candidates

    项目启动编译时报错 错误原因 当前项目下无法找到单个main方法 因为当前项目有两个main方法 有时可能有多个 此些main方法会列在 括号中 解决方式 把非启动类中的那些main方法注释掉 保证只有一个main方法
  • cocos自定义类 绑定到lua

    1 按照 frameworks cocos2d x tools tolua下的README mdown的指示一步一步做下去 务必要和文件中描述的一样 我已经被这个坑爹的东西坑的很惨了 检查这个有没有配置好的方法是 运行下那个genbindi
  • 循环依赖 三级缓存解决

    循环依赖的产生 A对象里面依赖着B对象 B对象依赖着A对象 流程 当A开始实例化A 然后初始化A 再初始化的A的时候 去实例化B 然后再初始化B 初始化B的时候在去实例化A 产生一个循环依赖 spring设置三级缓存来解决这个问题 Obje
  • 校招面试重点汇总之多线程(不多但都是高频面试题)

    一 进程和线程有什么区别 进程和线程都是操作系统中用来实现多任务的概念 但是它们之间有一些重要的区别 如下所述 1 定义方面 进程 进程是操作系统中分配资源的基本单位 是正在运行中的一个程序 一个进程可以包含多个线程 每个进程有自己独立的地
  • vscode检测到#include错误,请更新includePath。解决方法

    vscode检测到 include错误 请更新includePath 解决方法 最近电脑重做 重新安装了一边vscode 但是写代码的时候发现头文件会标错 显示无法找到 下面是我的解决办法 Linux 子系统 执行命令查看g 包含路径 g
  • Android Studio开发环境搭建及本地Gradle设置方法

    Android Studio开发环境搭建及本地Gradle设置方法 在进行Android应用程序开发时 Android Studio是一款非常强大的集成开发环境 IDE 它提供了丰富的工具和功能 帮助开发者轻松创建 测试和调试Android
  • java token生成规则_token的生成原理 使用方法!

    什么是token Token是服务端生成的一串字符串 以作客户端进行请求的一个令牌 当第一次登录后 服务器生成一个Token便将此Token返回给客户端 以后客户端只需带上这个Token前来请求数据即可 无需再次带上用户名和密码 基于 To
  • [解决办法]已经安装了数字证书,但是谷歌浏览器登录https协议的web系统时仍然提示证书不受信任...

    已经安装了数字证书 但是谷歌浏览器登录https协议的web系统时仍然提示证书不受信任 如下图 解决办法 1 单击Chrome浏览器右侧设置菜单 选择 设置 2 拖至页面下方 单击 显示高级设置 3 单击高级设置中的 HTTPS SSL 处
  • IDEA 热部署项目

    使用Idea 开发SpringBoot项目 修改完代码以后 要重新启动 Application 才可以看到效果 这样做开发效率肯定是大受影响的 可以通过热部署 热更新来实时加载更改 提高效率 1 引入热部署插件
  • 电脑蓝屏终止代码irql_一分钟教你看懂蓝屏代码,轻松解决电脑蓝屏问题

    电脑突然蓝屏的情况 想必很多朋友都遇到过吧 不知道你们是怎么解决的呢 重装系统 还是找专业人员维修呢 其实只要够看懂蓝屏代码 就能 对症下药 有些问题自己就能解决 今天小源就分享一些常见的蓝屏代码给大家 下面我们一起来看看吧 一 0X000
  • Python中的字典索引

    Python中的符合数据类型 字符串 列表和序列 它们用整数作为索引 如果你试图用其他的类型做索引 就会产生错误 gt gt gt list 1 2 3 gt gt gt list 0 1 gt gt gt list one Traceba
  • 【Linux】序列化和反序列化

    文章目录 定义 利用 Json 实现序列化反序列化 Json 的认识 Jsoncpp 库的下载与认识 实现序列化 实现反序列化 在网络编程中 直接使用 结构体 进行数据传输会出错 因为本质上socket无法传输结构体 我们只有将结构体装换为
  • 接口测试用例怎么写?一文1600字教你写一个优秀的接口测试的测试用例

    一 用例设计1 1 接口测试概念 接口测试 测试系统间接口的一种测试 测试的对象主要是接口 主要是测试外部系统与所测系统之间以及内部系统之间的交互点 2 接口测试方法 a 可以通过开发脚本代码进行测试 b 可以通过开源免费的接口调用调试工具
  • 虚拟文件系统 (VFS)-基于linux3.10

    引言 虚拟文件系统 VFS VirtualFileSystem 介于具体的文件系统和C库之间 其用提供一个统一的方法来操作文件 目录以及其它对象 其能够很好的抽象具体的文件系统 在linux上具体的文件系统主要分为三类 l 基于非易失性的存
  • 【CV with Pytorch】第 4 章 :构建图像分割模型

    我们周围的图像有不同的纹理 图案 形状和大小 它们携带着大量的信息 这些信息很容易被人眼和大脑理解 但计算机却不太容易理解 图像分割是一个问题集 我们试图训练计算机理解图像 以便它们可以分离不同的对象并将相似的对象分组 这可以是类似像素强度
  • 在远程服务器上执行本地的shell脚本

    1 使用ssh实现 ssh user hostname C bin bash lt test sh 2 使用expect实现 采用的策略就是先在本地通过expect把shell脚本推送到远程服务器上 之后再用expect模拟登录之后 先给远