通过跳板机拷贝远程服务器文件

## 背景

在日常开发或者运维中,经常会遇到开发环境与线上环境网络隔离,需要通过跳板机连接的场景,如果需要将目标机器上的定位信息搬迁到开发机做进一步排查时,经常取文件比较费劲,一般操作是将目标文件拷贝到跳板机,再从跳板机拷贝到开发机。本文介绍两种好用的方式。

## 解决办法

### 办法一:编写脚本实现通过跳板机拷贝

- 以下脚本实现了通过跳板机取目标服务器的文件,支持正则表达式匹配。

- tips1:跳板机和目标服务器的密码作为命令行参数传递,未加密。

- tips2:如果sshpass命令不可用,先到跳板机上安装一下yum install sshpass

#!/bin/bash
# 拷贝远程目录下后缀为gz的文件到本地
# ./get_trace.sh -jump_ip xx.xx.xx.xx -jump_pwd xxx -remote_ip xx.xx.xx.xx -remote_pwd xxx -remote_path /root/logs/ -remote_file_suffix gz -local_path /home/bigdisk/05-test/copy_remote/logs/
# 拷贝远程目录/root/logs/下0号pod的所有日志内容到本地
#./get_trace.sh -jump_ip xx.xx.xx.xx -jump_pwd xxx -remote_ip xx.xx.xx.xx -remote_pwd xxx -remote_path /root/logs/ -pod_id 0 -local_path /home/bigdisk/05-test/copy_remote/logs/
# 拷贝远程目录下目录的正则表达式符合.*/i-.*-0的目录下所有内容到本地
# ./get_trace.sh -jump_ip xx.xx.xx.xx -jump_pwd xxx -remote_ip xx.xx.xx.xx -remote_pwd xxx -remote_path /root/logs/ -remote_path_regex .*/i-.*-0 -local_path /home/bigdisk/05-test/copy_remote/logs/
# 跳板机和远程服务器的配置
JUMP_SERVER_USER="root"
JUMP_SERVER="xx.xx.xx.xx" # 改成跳板机IP
JUMP_SERVER_PWD=""
REMOTE_SERVER_USER="root"
REMOTE_SERVER=""
REMOTE_SERVER_PWD="" 
REMOTE_PATH_REGEX=""
REMOTE_FILE_SUFFIX=""
REMOTE_PATH="/root/logs/" # 支持正则表达式,例如:
LOCAL_PATH="./"
# 创建本地路径,如果它不存在的话
# mkdir -p "$LOCAL_PATH"# ###################### script started ######################
while [ $# -gt 0 ]; dokey="$1"case $key in-h)shiftecho "use like this: -jump_ip xx.xx.xx.xx -jump_pwd xxxxx -remote_ip xx.xx.xx.xx -remote_pwd xxxxx -remote_path /path/to/remote/directory/* -local_path /path/to/local/directory"echo "or use like this: -jump_ip xx.xx.xx.xx -jump_pwd xxxxx -remote_ip xx.xx.xx.xx -remote_pwd xxxxx -remote_path_regex .*/i-.*-19 -local_path /path/to/local/directory";;-jump_ip)shiftJUMP_SERVER="$1"echo "jump_ip is ${JUMP_SERVER}";;-jump_pwd)shiftJUMP_SERVER_PWD="$1";;-remote_ip)shiftREMOTE_SERVER="$1"echo "remote_ip is ${REMOTE_SERVER}";;-remote_pwd)shiftREMOTE_SERVER_PWD="$1";;-remote_path)shiftREMOTE_PATH="$1"echo "remote_path is ${REMOTE_PATH}";;-pod_id)shiftREMOTE_POD_ID="$1"REMOTE_PATH_REGEX=".*/i-.*-$REMOTE_POD_ID"echo "remote_pod id is ${REMOTE_POD_ID}, remote_path_regex is ${REMOTE_PATH_REGEX}";;-remote_path_regex)shiftREMOTE_PATH_REGEX="$1"echo "remote_path_regex is ${REMOTE_PATH_REGEX}";;-remote_file_suffix)shiftREMOTE_FILE_SUFFIX="$1"echo "remote_file_suffix is ${REMOTE_FILE_SUFFIX}";;-local_path)shiftLOCAL_PATH="$1"echo "local_path is ${LOCAL_PATH}";;*)echo "ERROR: unknown option \"$key\""echousageexit 1;;esacshift
done# 使用 sshpass 和 SSH ProxyCommand 通过跳板机获取文件
if [ -z "$REMOTE_PATH_REGEX" ]; thenecho "remote_path_regex is empty"
elseecho "remote_path is ${REMOTE_PATH}/${REMOTE_PATH_REGEX}"REMOTE_PATH=$(sshpass -p ${REMOTE_SERVER_PWD} ssh -o ProxyCommand="sshpass -p ${JUMP_SERVER_PWD} ssh -W %h:%p -o StrictHostKeyChecking=no ${JUMP_SERVER_USER}@${JUMP_SERVER}" -o StrictHostKeyChecking=no ${REMOTE_SERVER_USER}@${REMOTE_SERVER} "find ${REMOTE_PATH} -type d -regextype egrep -regex '${REMOTE_PATH_REGEX}' -print -quit")if [ -z "$REMOTE_PATH" ]; thenecho "没有找到匹配的远程目录"elseecho ${REMOTE_PATH}/${REMOTE_PATH_REGEX}fi
fi# find remote path and get all files
if [ -z "$REMOTE_FILE_SUFFIX" ]; thenecho "remote_file_suffix is empty, get all files"sshpass -p ${REMOTE_SERVER_PWD} ssh -o ProxyCommand="sshpass -p ${JUMP_SERVER_PWD} ssh -W %h:%p -o StrictHostKeyChecking=no ${JUMP_SERVER_USER}@${JUMP_SERVER}" -o StrictHostKeyChecking=no ${REMOTE_SERVER_USER}@${REMOTE_SERVER} "tar czf - -C ${REMOTE_PATH} ." | tar xzf - -C ${LOCAL_PATH}
elseecho "remote path:${REMOTE_PATH} remote_file_suffix is ${REMOTE_FILE_SUFFIX}, get all this type files" sshpass -p ${REMOTE_SERVER_PWD} ssh -o ProxyCommand="sshpass -p ${JUMP_SERVER_PWD} ssh -W %h:%p -o StrictHostKeyChecking=no ${JUMP_SERVER_USER}@${JUMP_SERVER}" -o StrictHostKeyChecking=no ${REMOTE_SERVER_USER}@${REMOTE_SERVER} "cd ${REMOTE_PATH} && tar czf - -C ${REMOTE_PATH} -- *.${REMOTE_FILE_SUFFIX}" | tar xzf - -C ${LOCAL_PATH}
fi

### 办法二:安装软件WindTerm

- github地址:GitHub - kingToolbox/WindTerm: A professional cross-platform SSH/Sftp/Shell/Telnet/Serial terminal.A professional cross-platform SSH/Sftp/Shell/Telnet/Serial terminal. - kingToolbox/WindTermicon-default.png?t=N7T8https://github.com/kingToolbox/WindTerm

- 方法:1)先创建跳板机的ssh连接 2)再创建远程服务器的ssh,同时选择代理链接为跳板机。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Bert-as-service 学习

pip3 install --user --upgrade tensorflow 安装遇到的问题如下: pip3 install --user --upgrade tensorflow 1052 pip uninstall protobuf 1053 pip3 uninstall protobuf 1054 pip3 install protobuf3.20.* 1055 pip3 install open-clip-torch2.8.2 1…

单片机精进之路-5矩阵键盘扫描

如下图,先在p3口输出0xfe,再读取p3口的电平,如果没有按键按下,temp & 0xf0还是0xf0,如果又第一个键按下,temp & 0xf0还是0xee,其他按键由此类推可得。 //4*4键盘检测程序,按下键后相应…

[C++核心编程](二):引用

目录 基本语法 引用做函数参数 引用做函数返回值 常量引用 基本语法 给变量取别名:数据类型 &别名 原名; 本质:指针常量(指针的指向不可改,指向的值可改) int value 10;int &index value; …

贪心算法(算法竞赛、蓝桥杯)--修理牛棚

1、B站视频链接&#xff1a;A27 贪心算法 P1209 [USACO1.3] 修理牛棚_哔哩哔哩_bilibili 题目链接&#xff1a;[USACO1.3] 修理牛棚 Barn Repair - 洛谷 #include <bits/stdc.h> using namespace std; const int N205; int m,s,c,ans; int a[N];//牛的位置标号 int d[N…

将仓库A中的部分提交迁移到仓库B中

结论&#xff1a; 使用git format-patchgit am即可实现 使用场景&#xff1a; 例如仓库A这里有5个提交记录&#xff0c;commitid1, commitid2, commitid3, commitid4&#xff0c;commitid5 仓库B想用仓库A中提交的代码&#xff0c;手动改比较慢&#xff0c;当改动较多的时候…

【kubernetes】二进制部署k8s集群之cni网络插件flannel和calico工作原理

k8s集群的三种接口 k8s集群有三大接口&#xff1a; CRI&#xff1a;容器进行时接口&#xff0c;连接容器引擎--docker、containerd、cri-o、podman CNI&#xff1a;容器网络接口&#xff0c;用于连接网络插件如&#xff1a;flannel、calico、cilium CSI&#xff1a;容器存储…

人大金仓与mysql的差异与替换

人大金仓中不能使用~下面的符号&#xff0c;字段中使用”&#xff0c;无法识别建表语句 创建表时语句中只定义字段名.字段类型.是否是否为空 Varchar类型改为varchar&#xff08;长度 char&#xff09; Int(0) 类型为int4 定义主键&#xff1a;CONSTRAINT 键名 主键类型&#x…

一个创业好项目,最适合白手起家的创业项目

一个创业好项目&#xff0c;最适合白手起家的创业项目 白手起家是很多比较青睐的一种创业模式&#xff0c;但是白手起家并不是一件简单的事情&#xff0c;首先就需要创业者要选好&#xff0c;那么什么样的创业项目适合白手起家呢?今天就给大家进行了盘点&#xff0c;希望能够帮…

Spring Cloud微服务注册中心Consul入门使用(上)

一、Consul安装使用 1.1 what’s the consul? Consul是Go语言编写的一个分布式高可用的服务网格解决方案&#xff0c;提供包括服务发现、配置和分段功能在内的全功能控制平面。它的每个功能都可以单独使用&#xff0c;也可以用它来构建完整的服务网格。 为什么要用它呢&…

3D工业相机及品牌集合

3D相机可以获取物理世界的空间信息&#xff0c;即立体三维的物理信息&#xff0c;不仅可以拍摄到场景的二维图像&#xff0c;而且能获取物体之间的位置关系&#xff0c;再经过进一步深化处理&#xff0c;还能完成三维建模等应用。 3D相机三种方案 1、结构光 通常采用特定波长…

数字孪生的技术开发平台

数字孪生的开发平台可以基于各种软件和硬件工具来实现&#xff0c;这些平台提供了丰富的功能和工具&#xff0c;帮助开发人员构建、部署和管理数字孪生系统&#xff0c;根据具体的需求和技术要求&#xff0c;开发人员可以选择合适的平台进行开发工作。以下列举了一些常见的数字…

拼多多商品详情数据,item_get-根据ID取拼多多商品详情

item_get-根据ID取商品详情 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥WeChat18305163218api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_sear…

2023年消费者心中的十大信赖品牌,好狄空气能热水器成功上榜

随着环保意识的增强和能源消耗的持续关注&#xff0c;空气能热水器以其高效节能、绿色环保的特性赢得了越来越多消费者的青睐。市场上琳琅满目的空气能热水器品牌让消费者在选择时既兴奋又困惑。究竟哪些品牌能在激烈的竞争中脱颖而出&#xff0c;成为消费者心目中的佼佼者呢&a…

RK3568平台开发系列讲解(Linux系统篇)SPI 客户端通信

🚀返回专栏总目录 文章目录 一、spi_transfer二、spi_message三、初始化沉淀、分享、成长,让自己和他人都能有所收获!😄 SPI I/O模型由一组队列消息组成。我们提交一个或多个struct spi_message结构时,这些结构以同步或异步方式处理完成。单个消息由一个或多个struct sp…

【目标检测新SOTA!v7 v4作者新作!】YOLO v9 思路设计 + 全流程优化 + 手把手训练自己数据

YOLO v9 思路复现 全流程优化 手把手训练自己数据 提出背景&#xff1a;深层网络的 信息丢失、梯度流偏差YOLO v9 设计逻辑可编程梯度信息&#xff08;PGI&#xff09;&#xff1a;使用PGI改善训练过程广义高效层聚合网络&#xff08;GELAN&#xff09;&#xff1a;使用GELAN…

深度学习神经网络实战:多层感知机,手写数字识别

目的 利用tensorflow.js训练模型&#xff0c;搭建神经网络模型&#xff0c;完成手写数字识别 设计 简单三层神经网络 输入层 28*28个神经原&#xff0c;代表每一张手写数字图片的灰度隐藏层 100个神经原输出层 -10个神经原&#xff0c;分别代表10个数字 代码 // 导入 Ten…

CSS 的盒模型

CSS 的盒模型 在HTML里&#xff0c;每一个元素就相当于是一个矩形的 “盒子” &#xff0c;这个盒子由以下这几个部分构成&#xff1a;1.边框border&#xff0c;2.内容content&#xff0c;3.内边距padding&#xff0c;4.外边距margin 边框border 基础属性描述border-width粗…

【Python笔记-设计模式】中介者模式

一、说明 中介者模式是一种行为设计模式&#xff0c;减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互&#xff0c;迫使它们通过一个中介者对象进行合作。 (一) 解决问题 降低系统中对象之间的直接通信&#xff0c;将复杂的交互转化为通过中介者进行的间接交…

新的一年,如何优化企业库存管理?

随着社会的发展和经济的不断增长&#xff0c;库存管理成为了企业运营中非常重要的一环。库存作为企业的资产之一&#xff0c;直接影响着企业的盈利能力和竞争优势。因此&#xff0c;对企业库存进行科学的分析和管理&#xff0c;成为了确保企业持续稳定发展的必要手段之一。企业…

设计模式(十) - 工厂方式模式

前言 在此前的设计模式&#xff08;四&#xff09;简单工厂模式中我们介绍了简单工厂模式&#xff0c;在这篇文章中我们来介绍下工厂方法模式&#xff0c;它同样是创建型设计模式&#xff0c;而且又有些类似&#xff0c;文章的末尾会介绍他们之间的不同。 1.工厂方法模式简介 …