【linux基础】linux远程传输三种免交互方式
linux远程传输三种免交互方式
文章目录
- linux远程传输三种免交互方式
- 1、使用sshpass工具
- 2、使用expect脚本来输入密码
- 3、SSH 密钥对
1、使用sshpass工具
建立信任关系的做法是最方便和安全的做法,但是在有些场景下(比如远端的authorized_keys是不能随意更改的),那么这个时候我们就可以借助sshpass这个第三方工具来完成ssh连接时的密码输入。先看一下sshpass的man手册中是如何描述的
sshpass - noninteractive ssh password provider从描述上就可以清晰的了解到,sshpass的设计就是为了使用非交互的场景下输入ssh连接的密码。sshpass的使用比较简单,先看一下帮助文档:root@localhost:~# sshpass Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters-f filename Take password to use from file从文件中读取密码-d number Use number as file descriptor for getting password使用文件描述符来获取密码-p password Provide password as argument (security unwise)将密码作为参数传递(安全性不佳,不推荐使用)-e Password is passed as env-var "SSHPASS"将密码作为环境变量 "SSHPASS" 来传递With no parameters - password will be taken from stdin 如果没有参数 - 密码将从标准输入(stdin)获取-h Show help (this screen)显示帮助信息(当前屏幕)-V Print version information 打印版本信息At most one of -f, -d, -p or -e should be used
-f filename:从指定的文件中读取密码。文件中应只包含密码,使用该选项时应注意保护好该文件的访问权限,以免泄露密码。
-d number:使用指定的文件描述符来获取密码。这是一种高级用法,一般情况下不常用。
-p password:直接将密码作为参数传递给 sshpass。这种方式不安全,因为密码会在命令行中可见,不推荐在生产环境中使用。
-e:将密码作为名为 “SSHPASS” 的环境变量传递给 sshpass。这种方式相对于将密码直接作为参数传递要更安全一些。
如果没有任何选项:sshpass 将从标准输入(stdin)获取密码。这种方式适合于将密码与脚本结合使用,不会直接在命令行中暴露密码。
其中-p是直接指定密码,-f是从文件中读取密码。那么一个使用sshpass的简单例子就是:
[root@node1 ~]# sshpass -f pa.txt scp index root@10.66.110.199:/var<br>
[root@node1 ~]# sshpass -p root1234 scp config.log root@10.66.110.199:/root/a.lo
使用sshpass的好处就是方便直接,无需了解公私钥、加密认证等相关知识,简单易懂;但是使用sshpass最大的坏处就是在使用时会涉及到明文密码,大大降低了安全性。
2、使用expect脚本来输入密码
expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh之类需要用户手动输入密码然后确认的任务。有了这个工具,定义在scp过程中可能遇到的情况,然后编写相应的处理语句,就可以自动地完成scp操作了。
下面就是一个使用expect来完成scp时无需输入密码的脚本:
#!/usr/bin/expect# 设置超时时间
set timeout 60# 获取命令行参数
set compressed_file [lindex $argv 0]
set remote_user [lindex $argv 1]
set remote_host [lindex $argv 2]
set remote_dir [lindex $argv 3]
set remote_pass [lindex $argv 4]# 执行scp命令进行文件传输
spawn scp $compressed_file $remote_user@$remote_host:$remote_dir# 期望匹配的提示符,根据实际情况修改
expect {"*assword:" {# 匹配到密码提示,发送密码send "$remote_pass\r"exp_continue}"yes/no" {# 第一次连接时会询问是否确认连接,输入yes并回车send "yes\r"expect "*assword:"send "$remote_pass\r"exp_continue}eof {# 文件传输结束exit}timeout {# 超时处理send_user "传输超时或失败\n"exit 1}
}# 等待传输完成
expect eof
代码刚开始的第一行,指定了expect的路径,与shell脚本相同,这一句指定了程序在执行时到哪里去寻找相应的启动程序。代码刚开始还设定了timeout的时间为10秒,如果在执行scp任务时遇到了代码中没有指定的异常,则在等待10秒后该脚本的执行会自动终止。
从以上代码刚开始的几行可以看出,我为这个脚本设置了5个需要手动输入的参数,分别为:目标主机的IP、用户名、密码、本地文件路径、目标主机中的文件路径。如果将以上脚本保存为expect_scp文件,则在shell下执行时需要按以下的规范来输入命令:
expect -f /path/to/transfer.expect "/data/mysqlbeifen/ceshi.txt" "root" "10.66.110.199" "/opt/mysqlbackup/" "123456" > /dev/null 2>&1
以上的命令执行后,将把本地data/mysqlbeifen/目录下的文件拷贝到用户名为root,密码为123456的主机10.66.110.199中的/opt/mysqlbackup/下,同时还将这个源文件重命名为dest_file。
spawn代表在本地终端执行的语句,在该语句开始执行后,expect开始捕获终端的输出信息,然后做出对应的操作。expect代码中的捕获的(yes/no)内容用于完成第一次访问目标主机时保存密钥的操作。有了这一句,scp的任务减少了中断的情况。代码结尾的expect eof与spawn对应,表示捕获终端输出信息的终止。
使用expect需要了解的一点是:用expect速度会比较慢,因为需要等待返回的数据,然后输入命令执行,没有ssh密钥登录的快速。
3、SSH 密钥对
要实现从 10.66.110.200 服务器上通过 SCP(Secure Copy)方式将文件传输到 10.66.110.91 服务器上,并且避免手动输入密码,可以按照以下步骤操作:
在本地服务器 10.66.110.200 上操作:
生成 SSH 密钥对(如果尚未生成):
ssh-keygen -t rsa -b 4096
按照提示生成 SSH 密钥对,可以选择保留空白密码。
Enter file in which to save the key (/root/.ssh/id_rsa):这是询问您要将私钥保存在哪个文件中的提示。默认情况下,私钥会保存在 /root/.ssh/id_rsa 文件中。您可以按 Enter 使用默认值,或者输入其他路径和文件名来保存私钥。
Enter passphrase (empty for no passphrase):这是询问您是否要为私钥设置密码短语(passphrase)。密码短语是一个可选项,它会为您的私钥提供额外的安全性。如果您希望设置密码短语,请在此处输入密码短语;如果不希望设置,请直接按 Enter 跳过。
Enter same passphrase again:如果您选择了设置密码短语,则需要再次确认输入相同的密码短语。
Your identification has been saved in /root/.ssh/id_rsa:这条消息告诉您私钥已经成功生成并保存在指定的文件中(默认为 /root/.ssh/id_rsa)。
Your public key has been saved in /root/.ssh/id_rsa.pub:这条消息告诉您公钥已经成功生成并保存在指定的文件中(默认为 /root/.ssh/id_rsa.pub)。
The key fingerprint and randomart image:这两段信息是用来验证密钥的额外信息:
Key fingerprint (SHA256:7MJuHX6DMcNsSUqk0zCgaJ+WCzUPHqKT/Sf0j0x5lMs): 这是密钥的指纹,用于标识密钥的唯一性。
Randomart image: 这是一种用ASCII字符表示的图形化展示密钥的方式,可以帮助您视觉上确认密钥的正确性。
将公钥复制到远程服务器 10.66.110.91 上:
使用 ssh-copy-id 命令将本地生成的公钥添加到目标服务器的 ~/.ssh/authorized_keys 文件中。假设目标服务器用户名为 remote_user,执行以下命令:
ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@10.66.110.91
如果你选择手动添加公钥,可以将 ~/.ssh/id_rsa.pub 文件的内容复制并粘贴到 remote_user@10.66.110.91 服务器的 ~/.ssh/authorized_keys 文件中。
测试 SSH 连接:
确保你可以通过 SSH 连接到目标服务器而无需输入密码:
ssh remote_user@10.66.110.91
如果连接成功而无需密码,则表示 SSH 配置正确。
在脚本中使用 SCP 进行文件传输:
编写一个脚本来执行文件传输操作。假设要传输的文件为 /path/to/local/file.txt,目标位置为 /path/to/remote/:
#!/bin/bashlocal_file="/path/to/local/file.txt"
remote_user="remote_user"
remote_ip="10.66.110.91"
remote_dir="/path/to/remote/"scp -i ~/.ssh/id_rsa "$local_file" "$remote_user@$remote_ip:$remote_dir"
scp -i ~/.ssh/id_rsa:使用指定的私钥文件进行身份验证。
"$local_file":本地文件路径。
"$remote_user@$remote_ip:$remote_dir":远程服务器的用户名、IP地址和目标路径。
运行脚本:
确保脚本有执行权限 (chmod +x script.sh),然后运行它:
./script.sh
脚本将会把本地的文件传输到远程服务器 10.66.110.91 的指定目录中,整个过程将是免交互的,不需要手动输入密码。
通过这些步骤,你可以在 10.66.110.200 服务器上实现通过 SCP 将文件传输到 10.66.110.91 服务器上,并且避免手动输入密码。
相关文章:
【linux基础】linux远程传输三种免交互方式
linux远程传输三种免交互方式 文章目录 linux远程传输三种免交互方式1、使用sshpass工具2、使用expect脚本来输入密码3、SSH 密钥对 1、使用sshpass工具 建立信任关系的做法是最方便和安全的做法,但是在有些场景下(比如远端的authorized_keys是不能随意更改的)&…...
MySQL篇:事务
1.四大特性 首先,事务的四大特性:ACID(原子性,一致性,隔离性,持久性) 在InnoDB引擎中,是怎么来保证这四个特性的呢? 持久性是通过 redo log (重做日志&…...
处理在 electron 中使用开启了懒加载的 el-image 后,窗口最大化或窗口尺寸变化后图片无法显示的问题
文章目录 1、问题描述2、详情动图3、解决思路4、解决方案5、效果展示 1、问题描述 在 electron 中使用 el-image 时,开启了懒加载后,发现只有当窗口滚动后,图片才会显示,即便图片已经处于窗口的可视区域。当拖动窗口使其尺寸变大…...
Electron 进程间通信
文章目录 渲染进程到主进程(单向)渲染进程到主进程(双向)主进程到渲染进程 (单向,可模拟双向) 渲染进程到主进程(单向) send (render 发送)on &a…...
0基础学python-8:if,while,for
目录 前言: 一、选择循环结构 1.if条件语句 2.while 3.for循环 4.break语句 5.continue语句 前言: if、while 和 for 是 Python 中常用的控制流结构,它们分别用于条件判断、循环执行和迭代遍历。这些关键字帮助程序根据条件和数据进行选…...
低空经济持续发热,无人机培训考证就业市场及前景剖析
随着科技的不断进步和社会需求的日益增长,低空经济已成为全球及我国经济增长的新引擎。作为低空经济的重要组成部分,无人机技术因其广泛的应用领域和显著的经济效益,受到了社会各界的广泛关注。为满足市场对无人机人才的需求,无人…...
[IDEA插件] JarEditor 编辑jar包(直接新增、修改、删除jar包内的class文件)
文章目录 1. 安装插件 JarEditor2. 在IDEA中添加外部JAR包3. JarEditor 使用介绍 之前我们需要修改jar内文件的时候需要解压jar包,反编译class,新建java源文件,修改代码,再编译成class,替换jar包内的class文件。 现在…...
JavaScript系列:JS实现复制粘贴文字以及图片
文章目录 一. 基于 Clipboard API 复制文字(推荐)基本概念主要方法使用限制实际应用示例 二、基于 document.execCommand(copy)缺陷实际应用示例说明 三、复制图片功能四、封装 一. 基于 Clipboard API 复制文字(推荐) 基本概念 …...
音视频入门基础:H.264专题(14)——计算视频帧率的公式
一、引言 通过FFmpeg命令可以获取到H.264裸流文件的视频帧率: 在vlc中也可以获取到视频帧率(vlc底层也使用了FFmpeg进行解码): 所以FFmpeg和vlc是怎样获取到H.264编码的视频的帧率呢?它们其实是通过SPS中的VUI parame…...
LeetCode-返回链表倒数第K个节点、链表的回文结构,相交链表
一、返回链表倒数第k个节点 . - 力扣(LeetCode) 本体思路参展寻找中间节点的方法,寻找中间节点是定义快慢指针,快指针每次走两步,慢指针每次走一步,当快指针为空或者快指针的下一个节点是空时,…...
Linux 网络配置与连接
一、网络配置 1.1 ifconfig 网卡配置查询 ifconfig #查看所有启动的网络接口信息 ifconfig 指定的网卡 #查看指定网络接口信息 1.2 修改网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 #ens33网络配置文…...
5. 基于Embedding实现超越elasticsearch高级搜索
Embedding介绍 Embedding是向量的意思,向量可以理解为平面坐标中的一个坐标点(x,y),在编程领域,一个二维向量就是一个大小为float类型的数组。也可以用三维坐标系中的向量表示一个空间中的点。在机器学习中,向量通常用于表示数据的特征。 向量…...
探索Docker网络配置和管理
目录 1.docker网络类型有几种? 2.自定义网络管理 1.查看网络信息 2.查看网络的详细信息 3.创建四种网络容器 3.none类型 1.验证 4.host类型 1.验证 5. bridge类型 1.验证 2.设备对 6. container类型 1.验证 2.详解 7.科普下docker的网络名称空间 “…...
【数据库】 mysql数据库管理工具 Navicat平替工具 免费开源数据库管理工具
一、数据库分享 本次分享针对mysql的数据库管理工具 全部为开源免费工具 1、beekeeper-studio 可以从github或者官方下载 1.1、官方网址 官方地址:https://www.beekeeperstudio.io/ 1.2、Github 网址 Github地址:https://github.com/beekeeper-studio…...
信息系统项目管理师(高项)—学习笔记二
第一章 以下是上一篇(信息系统项目管理师(高项)—学习笔记)的续写,因为是之前记录的,这一篇还是细致到每一个小节的内容,有些过于复杂了,后续会简化~ 1.3 现代化创新发展 党的十九…...
【Vue】 style中的scoped
一、什么是scoped,为什么要用 在vue文件中的style标签上,有一个特殊的属性:scoped。 当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,通过该属性,可以使得组件之间的样式不互相污染…...
maven项目容器化运行之2-maven中使用docker插件调用远程docker构建服务并在1Panel中运行
一.背景 公司主机管理小组的同事期望我们开发的maven项目能够在1Panel管理的docker容器部署。上一篇写了先开放1Panel中docker镜像构建能力maven项目容器化运行之1-基于1Panel软件将docker镜像构建能力分享给局域网-CSDN博客。这一篇就是演示maven工程的镜像构建、容器运行、运…...
电影购票小程序论文(设计)开题报告
一、课题的背景和意义 随着互联网技术的不断发展,人们对于购票的需求也越来越高。传统的购票方式存在着排队时间长、购票流程繁琐等问题,而网上购票则能够有效地解决这些问题。电影购票小程序是网上购票的一种新型应用,它能够让用户随时随地…...
IP风险画像 金融行业的安全盾牌
在当今数字化时代,金融行业面临着前所未有的安全挑战。随着在线交易和数字银行业务的迅猛发展,欺诈和网络攻击的威胁也在不断增加。金融机构需要高效、可靠的安全解决方案来保护客户的资产和个人信息,防止各种形式的欺诈行为。 IP风险画像是…...
探索老年综合评估实训室的功能与价值
一、引言 随着人口老龄化的加剧,老年健康问题日益受到关注。老年综合评估实训室作为专门为老年人健康服务而设立的场所,具有独特的功能和重要的价值。 二、老年综合评估实训室的功能 (一)健康评估功能 1、身体功能评估 通过专业设…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
python打卡第47天
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图,展示模…...
