Shell脚本系列| SSH分发公钥方法 - expect脚本的使用

ssh原理:在SSH安全协议的原理中, 是一种非对称加密与对称加密算法的结合。用于确保远程登录和其他网络服务的会话安全,通过非对称加密、会话加密、多重验证机制等手段,保护数据传输的机密性和完整性。
ssh登录有2种方法:账号密码登录和公钥登录

一、帐号密码登录

没办法公证,不像https有CA证书公证。
在这里插入图片描述

1.服务端收到登录请求后,首先互换公钥。
2.客户端用服务端的公钥加密账号密码并发送
3.服务端用自己的秘钥解密后得到账号密码,然后进行验证
4.服务端用客户端的公钥加密验证结果并返回
5.客户端用自己的秘钥解密后得到验证结果

二、ssh免密码登录

利用公钥登录
在这里插入图片描述
步骤:

1.客户端用户必须手动地将自己的公钥添加到服务器一个名叫authorized_keys的文件里,顾名思义,这个文件保存了所有可以远程登录的机器的公钥。

2.客户端发起登录请求,并且发送一个自己公钥的指纹(具有唯一性,但不是公钥)

3.服务端根据指纹检测此公钥是否保存在authorized_keys中

4.若存在,服务端便生成一段随机字符串,然后利用客户端公钥加密并返回

5.客户端收到后用自己的私钥解密,再利用服务端公钥加密后发回

6.服务端收到后用自己的私钥解密,如果为同一字符串,则验证通过

三、分发密钥方法

1)ssh分发

ssh-keygen --help

-t type:指定密钥类型,包括“dsa”, “ecdsa” or “rsa”
-p() :更改私钥的密码。程序会提示输入私钥的密码以及2次新密码
-P():提供私钥的旧密码。
-N:提供私钥的新密码
-f :指定密钥文件的文件名
-b:指定密钥长度
-e:读取openssh的私钥或者公钥文件

ssh-copy-id命令:

ssh-copy-id [-i [identity_file]] [user@]machine
选项:-i 指定要分发的公钥

2 ) 使用expect解决交互式分发

expect脚本中常见命令:spawn, expect, send, interact…

spawn打开一个进程

expect该命令从进程接受字符串,如果接受的字符串和期待的字符串不匹配,则一直阻塞,直到匹配上或者等待超时才继续往下执行
expect会等待特定的输出(如"password:"),然后发送相应的响应(如密码)。

send向进程发送字符串,与手动输入内容等效,通常字符串需要以’\r’结尾

expect{"匹配字符" send {"需要发送的"} 
"匹配字符"send{"需要发送的字符"}}
或者
expect "匹配字符" 
send "发送字符\r"

interact该命令将控制权交给控制台,之后就可以进行人工操作了。通常用于使用脚本进行自动化登录之后再手动执行某些命令。如果脚本中没有这一条语句,脚本执行完将自动退出。

set timeout 30 设置超时时间timeout为30s,expect命令阻塞超时时会自动往下继续执行。将timeout配置为-1时表示expect一直阻塞直到与期待的字符串匹配上才继续往下执行。超时时间timeout默认为10s

[lindex $argv n]可以在脚本中使用该命令获取在脚本执行时传入的第n-1个参数。argv为传入的参数,另外argc表示传入参数的个数,n是从0开始,表示第一个参数…n=1表示第二个参数

exp_continue:继续执行下面匹配

\r:linux下的回车(Enter键)
安装

yum -y install expect

expect脚本:

[root@localhost ~]# vi ssh.exp
[root@localhost ~]# cat ssh.exp 
#!/usr/bin/expectset timeout 30
set ip [lindex $argv 0]                    #第1个参数,编号是0
set password [lindex $argv 1]              #第2个参数,编号是1  spawn ssh-copy-id -i /root/.ssh/id_dsa.pub root@$ip
expect {"(yes/no)?"  {send "yes\r";exp_continue}"password:" {send "$password\r"}
}
expect eof
expect /server/script/ssh_expect.exp 192.168.200.10 000000    
#192是第1个参数,编号是0 000000是第2个参数,编号是1

实现自动分发,无需手动输入ip及密码,将expect程序嵌套在shell脚本 :

[root@localhost ~]# cat autossh.sh 
#!/bin/bash
#########################1.创建密钥##################
. /etc/init.d/functions   # 注意. /之间是有空格的,不然就变成"当前目录"的"."了
#/etc/init.d/functions 是一个包含了一系列用于初始化脚本(init scripts)的函数的库文件
#点号(.)是source命令的简写,用于在当前shell环境中执行脚本,而不是创建一个新的子shell if [ ! -e "/root/.ssh/id_dsa.pub" ];then ssh-keygen -t dsa -P '' -f /root/.ssh/id_dsa >/dev/null 2>&1if [ $? -eq 0 ];thenaction "创建密钥成功" /bin/trueelseaction "创建密钥失败" /bin/falseexit 0fielseaction "密钥已存在" /bin/truefi
######################2.分发密钥####################
for ip in 10.10.102.{129..180}  #是一个 Bash 的大括号扩展。它会生成一个序列,从 129 到 180。
do
/usr/bin/expect << EOF > /dev/null 2>&1
spawn ssh-copy-id -i /root/.ssh/id_dsa.pub -p22 $ip
expect {"yes/no" {send "yes\r";exp_continue}"password" {send "000000\r"}
}
expect eof
EOF
if [ $? -eq 0 ];thenaction "$ip分发密钥完成" /bin/true
elseaction "$ip分发密钥失败" /bin/false
fi
done

在这里插入图片描述

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

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

相关文章

【二叉树】层序遍历

目录 层序遍历概念&结构 层序遍历的实现 整体思路 代码实现 图示理解 BT升级 整体思路 代码实现 图示理解​ 应用 题目 前序&中序&后序遍历&#xff1a;深度优先遍历dfs 层序遍历&#xff1a;广度优先遍历bfs 层序遍历概念&结构 层序遍历&#xf…

Stata实证命令代码汇总

Stata代码命令汇总 数据内容&#xff1a;包括数据导入和管理、数据的处理、描述性统计、相关性分析、实证模型、内生性解决、检验分析、结果导出 具体如下&#xff1a; 一、数据导入和管理&#xff1a;数据导入、数据导出 二、数据的处理&#xff1a;生成新变量、格式转换、…

【linux系统体验】-archlinux简易折腾

archlinux 一、系统安装二、系统配置及美化2.1 中文输入法2.2 安装virtualbox增强工具2.3 终端美化2.4 桌面面板美化 三、常用命令 一、系统安装 安装步骤人们已经总结了很多很全: Arch Linux图文安装教程 大体步骤&#xff1a; 磁盘分区安装 Linux内核配置系统&#xff08;…

服务器解析漏洞及任意文件下载

1.服务器文件解析漏洞 文件解析漏洞,是指Web容器&#xff08;Apache、nginx、iis等&#xff09;在解析文件时出现了漏洞,以其他格式执行出脚本格式的效果。从而,黑客可以利用该漏洞实现非法文件的解析。 &#xff08;1) Apache linux系统中的apache的php配置文件在/etc/apac…

机器学习9-随机森林

随机森林&#xff08;Random Forest&#xff09;是一种集成学习方法&#xff0c;用于改善单一决策树的性能&#xff0c;通过在数据集上构建多个决策树并组合它们的预测结果。它属于一种被称为“集成学习”或“集成学习器”的机器学习范畴。 以下是随机森林的主要特点和原理&…

30s学会RecyclerView创建动态列表

详细学习请参考官网 使用 RecyclerView 创建动态列表 | Android 开发者 | Android Developers (google.cn) 1.RecyclerView定义及其构造 少废话&#xff0c;就是一个视图控件&#xff0c;就像你刷小红书&#xff0c;东一块西一块很丝滑地滑动 就是 RecyclerView 如下图&a…

无心剑中译狄金森《你无法扑灭一场火》

You Cannot Put a Fire Out — 你无法扑灭一场火 Emily Dickinson 艾米莉狄金森 You cannot put a Fire out — A Thing that can ignite Can go, itself, without a Fan — Upon the slowest Night — 你无法扑灭一场火 一种东西&#xff0c;无需风扇 能在最舒缓悠长的夜…

go 语言爬虫库goquery介绍

文章目录 爬虫介绍goquery介绍利用NewDocumentFromReader方法获取主页信息Document介绍通过查询获取文章信息css选择器介绍goquery中的选择器获取主页中的文章链接 爬取总结 爬虫介绍 爬虫&#xff0c;又称网页抓取、网络蜘蛛或网络爬虫&#xff0c;是一种自动浏览互联网并从网…

leetcode(矩阵)74. 搜索二维矩阵(C++详细解释)DAY7

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中…

【计算几何】给定一组点的多边形面积

目录 一、说明二、有序顶点集三、无序顶点集3.1 凸多边形3.2 非凸多边形 四、结论 ​ 一、说明 计算多边形面积的方法有很多种。众所周知的多边形&#xff08;如三角形、矩形、正方形、梯形等&#xff09;的面积可以使用简单的数学公式计算。在这篇文章中&#xff0c;我将讨论…

Mysql Day04

mysql体系结构 连接层服务层引擎层&#xff08;索引&#xff09;存储层 存储引擎 存储引擎是基于表建立的&#xff0c;默认是innoDB show create table tb; 查看当前数据库支持的存储引擎 show engines; InnoDB 特点 DML&#xff08;数据增删改&#xff09;遵循ACID模…

重温阿里云宝塔面板部署前后端项目

首先祝大家新年快乐啊&#xff01; 回到老家&#xff0c;便打算趁这一段空闲时间提升一下自己&#xff0c;重点是学习实践一下echarts相关内容&#xff0c;很多公司项目都需要实现可视化&#xff0c;所以在bilibili上找了黑马的一个教程开始学习&#xff0c;不同的是&#xff…