【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、身体功能评估 通过专业设…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...