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

## 背景

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

## 解决办法

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

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

- 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://www.rhkb.cn/news/264064.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gnss 自然灾害监测预警系统是什么

【TH-WY1】GNSS自然灾害监测预警系统是一种基于全球导航卫星系统(GNSS)技术的自然灾害监测和预警系统。它利用GNSS的高精度定位技术,通过在地表布置GNSS接收设备,实时监测地表形变、位移、沉降等参数,从而实现对自然灾…

【FX110】因为爱情,台湾汇友陷OrientalFX投资骗局损失近50万

近日,一位台湾汇友就在感情与金钱上受到双重打击,在一场“浪漫骗局”中损失近50万新台币。 因为爱情,陷入无法出金的投资骗局 据汇友描述,她从未有过投资经验,之所以突然入市,是因为“Kevin”。Kevin是她在…

全面InfiniBand解决方案——LLM培训瓶颈问题

ChatGPT对技术的影响引发了对人工智能未来的预测,尤其是多模态技术的关注。OpenAI推出了具有突破性的多模态模型GPT-4,使各个领域取得了显著的发展。 这些AI进步是通过大规模模型训练实现的,这需要大量的计算资源和高速数据传输网络。端到端…

软考系分之多媒体的容量计算、多媒体的标准、媒体数据压缩

文章目录 1、概要2、数据压缩3、多媒体的标准4、多媒体的容量计算5、总结 1、概要 本篇重点介绍多媒体技术,包括多媒体标准、数据压缩和媒体容量的计算。 2、数据压缩 媒体数据能压缩的话,有个前提条件就是数据存在冗余,包括时间冗余、空间冗…

【Java程序设计】【C00267】基于Springboot的在线考试系统(有论文)

基于Springboot的在线考试系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 本系统是基于Springboot的在线考试系统;本系统主要分为管理员、教师和学生三种角色; 管理员登录系统后,可以对首页&#x…

【打工日常】使用docker部署StackEdit编辑器-Markdown之利器

一、StackEdit介绍 StackEdit一款强大的在线Markdown编辑器,不仅具备卓越的写作功能,还支持实时预览、多设备同步等特性。 很多时候基于安全和信息保密的关系,建议放在自己的服务器或者本地linux去运行,这样会比较省心。 二、本次…

day16_ListSet课后练习题 - 参考答案

文章目录 day16_课后练习题第1题第2题第3题第4题第5题第6题第7题第8题 day16_课后练习题 第1题 案例: ​ 1、用一个String[]数组存点数 ​ 2、用一个String[]数组存花色 ​ 3、用一个String[]数组存大王、小王 ​ 4、用上面的数组,生成一副扑克牌 …

第四节:Vben Admin登录对接后端getUserInfo接口

系列文章目录 第一节:Vben Admin介绍和初次运行 第二节:Vben Admin 登录逻辑梳理和对接后端准备 第三节:Vben Admin登录对接后端login接口 第四节:Vben Admin登录对接后端getUserInfo接口 文章目录 系列文章目录前言一、回顾Vben…

多重网格(Multigrid Method)-1

See https://zhuanlan.zhihu.com/p/49489140?utm_id0

【Linux进程】进程状态---进程僵尸与孤儿

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1.进程排队2.进程状态…

Stable Diffusion 绘画入门教程(webui)-ControlNet(Inpaint)

上篇文章介绍了语义分割Tile/Blur,这篇文章介绍下Inpaint(重绘) Inpaint类似于图生图的局部重绘,但是Inpain效果要更好一点,和原图融合会更加融洽,下面是案例,可以看下效果(左侧原图…

前端基础面试题(一)

摘要:最近,看了下慕课2周刷完n道面试题,记录下... 1.请说明Ajax、Fetch、Axios三者的区别 三者都用于网络请求,但维度不同: Ajax(Asynchronous Javascript ang XML),是一种在不重新…

ARM处理器有哪些工作模式和寄存器?各寄存器作用是什么?ARM异常中断处理流程?

《嵌入式工程师自我修养/C语言》系列——ARM处理器有哪些工作模式和寄存器?各寄存器作用是什么? 一、ARM处理器的工作模式及寄存器1.1 ARM处理器的工作模式1.2 ARM处理器中的寄存器 二、ARM 异常中断处理2.1 什么是异常?异常向量表是什么&…

[RCTF2015]EasySQL1 题目分析与详解

一、题目介绍: 1、题目来源: BUUCTF网址 2、题目介绍: 拿到flag。 二、解题思路: 我们发现题目首页有登录和注册账号两个选项,我们首先尝试注册账号,尝试注册username为admin的账号,输入密码…

FPGA OSERDESE2

Output Parallel-to-Serial Logic Resources (OSERDESE2) OSERDESE2 在Xilinx 7 系列器件是一款专用的并行至串行转换器,具有特定的时钟和逻辑资源,旨在促进高速源同步接口的实现。每个OSERDESE2模块都包括一个专用的数据串行器和 3 状态控制。数据和 3 态串行器都可以在 SD…

TVS管+二极管钳位电路的分析

我们通常的电路中多用TVS管或者单二极管来进行钳位,TVS管二极管同时钳位的情况比较少见,这篇文章就是分析TVS管二极管同时钳位的电路,主要学习其分析思路。 电路如下图,就是个flyback。可以看到,电路中有个钳位电路&a…

petalinux_zynq7 驱动DAC以及ADC模块之五:nodejs+vue3实现web网页波形显示

前文: petalinux_zynq7 C语言驱动DAC以及ADC模块之一:建立IPhttps://blog.csdn.net/qq_27158179/article/details/136234296petalinux_zynq7 C语言驱动DAC以及ADC模块之二:petalinuxhttps://blog.csdn.net/qq_27158179/article/details/1362…

MySQL锁三部曲:临键、间隙与记录的奇妙旅程

欢迎来到我的博客,代码的世界里,每一行都是一个故事 MySQL锁三部曲:临键、间隙与记录的奇妙旅程 前言临键锁的奥秘间隙锁记录锁 前言 在数据库世界中,锁是维护数据完整性的一种关键机制。而MySQL中的临键锁、间隙锁和记录锁则是锁…

博客阿里云服务器2024年最新优惠价格表,61元起

博客 阿里云服务器2024年最新优惠价表,轻量级应用服务器61元起,云服务器99元起 01-30 第591章 2024年阿里云服务器最新优惠价是多少? 阿里云服务器的租用价格在不同时期是不同的。 进入2024年,阿里云服务器的优惠价格也发生了…

【Python笔记-设计模式】桥接模式

一、说明 桥接模式是一种结构型设计模式, 主要用于将抽象部分与它的实现部分分离, 从而能在开发时分别使用,使系统更加灵活,易于扩展。 (一) 解决问题 所有 组合类的数量将以几何级数增长 抽象和实现分离:桥接模式可…