关于linux中批量配置ssh免密的一些笔记(代码片段)

山河已无恙 山河已无恙     2022-10-22     534

关键词:

写在前面


  • 今天和小伙伴们分享批量配置SSH免密的一些笔记
  • 传统的运维场景可以通过Ansible 等运维工具处理
  • 在安装使用一些运维工具,比如Ansible,或则一些pass组件,需要配置ssh免密,sudo免密的操作
  • 今天和小伙伴分享如何批量操作
  • 博文内容比较简单,涉及
    + expect 内网外网安装
    + 通过expect来批量配置免密
  • 食用方式:
    + 需要Linux 基础知识
  • 理解不足小伙伴帮忙指正

傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波


expect 安装

expect 是由Don Libes基于Tcl(Tool Command Language )语言开发的,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率

在内网环境下,无法连接yum源,我们可以找一台有网的机器,把rpm包下载下来,然后上传到内网环境

[root@vms152 ~]# yum -y install expect --downloadonly --downloaddir=/root/soft
...
[root@vms152 ~]# cd soft/;ls
expect-5.45-14.el7_1.x86_64.rpm  tcl-8.5.13-8.el7.x86_64.rpm

通过rpm -ivh 的方式来安装

[root@vms152 soft]# rpm -ivh /root/soft/*
准备中...                          ################################# [100%]
正在升级/安装...
   1:tcl-1:8.5.13-8.el7               ################################# [ 50%]
   2:expect-5.45-14.el7_1             ################################# [100%]
[root@vms152 soft]#
[root@vms152 soft]# which expect
/usr/bin/expect

在可以连接yum源的情况下,我们直接通过包管理器yum来下载

[root@vms152 soft]# yum -y install expect

expect 基础用法

这里以root用户为例配置免密

Expect作为一种重要的TCL扩展包,主要有以下几个命令:

  • spawn:spawn用于启动一个进程,之后所有expect操作都在这个进程中进行,类似于我们直接在命令行敲bash
  • expect:获取匹配信息匹配成功则执行expect后面的程序动作(检测由壳内进程发出的特定交互指令反馈字符串后向下执行)
  • send:用于向进程发送字符串(从壳外向壳内进程发送一条字符串,换行符为确认结束)
  • interact:允许用户交互
  • exp_continue:在expect中多次匹配就需要用到
  • send_user:用来打印输出 相当于shell中的echo
  • exit:退出expect脚本
  • eof:expect执行结束 退出
  • set:定义变量
  • puts:输出变量
  • set timeout:设置超时时间

我们来看一个简单的Demo,命令行的方式来运行,通过SSH登录一台机器,并退出。这个交互式到的命令通过expect如何处理。

[root@vms152 soft]# expect  <<- EOF
> spawn ssh root@127.0.0.1
> expect "*pass*"  send "redhat\\r"
> expect "*connecting*"  send "yes\\r"
> expect "#"
> send "exit \\r"
> expect eof
> EOF
spawn ssh root@127.0.0.1
root@127.0.0.1's password:
Last login: Sat Aug 20 15:22:06 2022 from 127.0.0.1
[root@vms152 ~]# exit
登出
Connection to 127.0.0.1 closed.
[root@vms152 soft]#

如果是第一次登录,或者没有保存公钥,那么会有一个保存公钥的提示,我们可以这样处理,这次我们通过ctl脚本的方式

[root@vms153 ~]# cat su.ctl
#!/usr/bin/expect

spawn ssh root@127.0.0.1

expect 
       "*connecting*"  send "yes\\r"
       "*pass*"  send "redhat\\r"
       

expect 
       "#" send "\\r"
       "*pass*"  send "redhat\\r"
       
expect 
       "#" send "exit \\r"
       
expect eof

清空SHSH存放公钥的文件,给脚本授权,执行

[root@vms153 ~]# cat /dev/null  > /root/.ssh/known_hosts
[root@vms154 ~]# chmod +x su.ctl 
[root@vms153 ~]# ./su.ctl
spawn ssh root@127.0.0.1
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:rQokINjVDeZOfyKKcLlhIe92bgkN8xZ13QiPwr/0cxo.
ECDSA key fingerprint is MD5:35:83:98:1d:76:b8:33:b0:b6:ba:d5:0f:34:2f:ba:b9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
root@127.0.0.1's password:
Last login: Sat Aug 20 17:25:03 2022 from 127.0.0.1
[root@vms153 ~]# exit
登出
Connection to 127.0.0.1 closed.
[root@vms153 ~]#

当然,也可以交互式的使用,下面的脚本实现通过SHH远程到一台机器,并查看主机名,然后把终端交给标准输入

[root@vms153 ~]# cat su.ctl
#!/usr/bin/expect

spawn ssh root@192.168.26.152

expect 
       "*connecting*"  send "yes\\r"
       "*pass*"  send "redhat\\r"
       

expect 
       "#" send "\\r"
       "*pass*"  send "redhat\\r"
       

expect "#"

send "hostname \\r"
expect "#"
interact

运行脚本,我们可以直接操作SSH机器

[root@vms153 ~]# ./su.ctl
spawn ssh root@192.168.26.152
root@192.168.26.152 s password:
Last login: Sat Aug 20 17:31:07 2022 from 192.168.26.153
[root@vms152 ~]#
[root@vms152 ~]# hostname
vms152.rhce.cc
[root@vms152 ~]# ls
anaconda-ks.cfg  calico_3_14.tar  calico.yaml  one-client-install.sh  set.sh  soft
[root@vms152 ~]# exit
登出
Connection to 192.168.26.152 closed.
[root@vms153 ~]#

expect 配置root免密

[root@vms152 soft]# cat host_list
192.168.26.153
192.168.26.154
[root@vms152 soft]# cat mianmi.sh
#!/bin/bash

#@File    :   mianmi.sh
#@Time    :   2022/08/20 17:45:53
#@Author  :   Li Ruilong
#@Version :   1.0
#@Desc    :   None
#@Contact :   1224965096@qq.com


/usr/bin/expect <<-EOF
spawn ssh-keygen
expect "(/root/.ssh/id_rsa)" send "\\r"
expect 
       "(empty for no passphrase)" send "\\r"
       "already" send "y\\r"
       

expect 
       "again" send "\\r"
       "(empty for no passphrase)" send "\\r"
       

expect 
       "again" send "\\r"
       "#" send "\\r"
       
expect "#"
expect eof
EOF

for IP in $( cat host_list )
do

if [ -n IP ];then

/usr/bin/expect <<-EOF
spawn ssh-copy-id root@$IP

expect 
       "*yes/no*"    send "yes\\r"
       "*password*"  send "redhat\\r" 
       
expect 
       "*password"  send "redhat\\r"
       "#"          send "\\r"
       
expect "#"
expect eof
EOF
fi

done

这里需要说明的是 expect 中有些特殊关键字用于匹配过程,代表某些特殊的含义或状态,可能会和shell 脚本中的冲突,所以一般只用于expect命令中而不能在expect命令单独使用,比如 eof,timeout等,如果密码中存在特殊字符,且在脚本里冲突,那么可以使用一些python模块来处理,比如Paramiko,fabric 等。

博文参考

linux expect 详解:https://blog.csdn.net/zxycyj1989/article/details/125837697

关于linux中批量配置ssh免密的一些笔记(代码片段)

写在前面今天和小伙伴们分享批量配置SSH免密的一些笔记传统的运维场景可以通过Ansible等运维工具处理在安装使用一些运维工具,比如Ansible,或则一些pass组件,需要配置ssh免密,sudo免密的操作今天和小伙伴分享... 查看详情

linux配置免密登录

参考技术A执行命令:ssh-keygen-trsa生成密钥。执行完成后,在.ssh目录生成两个文件:私钥id_rsa公钥id_rsa.pub将公钥拷贝到的需要配置免密的机器,在/root/.ssh目录下的authorized_keys文件。需要配置免密的机器权限配置: 查看详情

极智开发|linux下ssh或scp免密连接配置方法(代码片段)

...c;我是极智视界,本文介绍一下linux下ssh或scp免密连接配置方法。 ssh大家可能更加熟悉一些,ssh为secureshell的缩写,是专门为远程登录会话和其他网络服务提供安全性的协议。而scp是linux下基于ssh登录进行安全的远程... 查看详情

rsa公钥体系与在ssh中免密的登陆的应用(代码片段)

一、秘钥体系    第一部分查看书籍为北京大学出版社出版的丘维声老师的数学思维方式与创新    在之前安全协议的讲解中,很多的协议都是用了秘钥的这一概念,相信很多同学对这不求甚解,下面我来系统的... 查看详情

ssh免密连接互信认证

...维护时需要多台Linux主机相互连接,那此时就需要做ssh的免密码互信认证,而ssh的免密的互信认证实现比较简单,在此就简单的描述下,为描述方便我把内网中的2台需要做ssh互信认证的2台主机192.168.2.25、192.168.2.26这2台主机,其... 查看详情

过程记录ssh配置免密登录/anaconda环境迁移/gcc_g++安装切换(代码片段)

...法联网的服务器上,本篇就来记录快速迁移过程。ssh配置免密登录每次使用scp传文件需要输入密码,太过麻烦,可以通过配置ssh免密的方式来避免反复输入密码。ssh免密的原理分为以下6个步骤[1]:①使用ssh-key-gen... 查看详情

ssh免密登录的配置

SSH主要有两种登录方式,一种是密码的登录方式,另一种就是免密的公钥登录方式。第一种硬密码的登录方式有很多弊端:    1:手打密码远程连接服务器这种方式很不安全,尤其是有新的运维人员要使用服务器... 查看详情

关于linux中网络连接配置(networkmanager)的一些笔记(代码片段)

写在前面嗯,准备RHCA,学习整理这部分知识NetworkManager其实是RHCAS的内容博文内容为常见的配置操作回顾:NetworkManager简述命令行的方式配置网络连接修改配置文件的方式配置网络连接谁有权限修改网络连接配置傍晚... 查看详情

linux配置ssh免密登录(代码片段)

...候都需要输入密码,非常繁琐,今天教大家如何配置免密登录。教程在本地通过RSA加密算法生成公私钥对ssh-keygen-trsa-b4096-f~/.ssh/id_rsa_testt:指定加密类型b:指定加密字长f:指定保存路径$ssh-keygen-trsa-b4096 查看详情

ansible批量向客户端推送公钥,实现免密登录(代码片段)

1.安装ansibleyum-yinstallansible2.配置将客户端信息加到ansible得hosts配置文件中3.ansible服务端配置生成公钥,执行以下命令然后一直回车即可。ssh-keygen-trsa4.配置ansible剧本文件push-ssh.yml-hosts:ssh_hosttasks:-name:TransferfilefromServerAtoServerBCcopy:s... 查看详情

关于linux中systemd的一些笔记(代码片段)

写在前面嗯,准备RHCA,学习整理这部分知识博文内容涉及:systemd简述对于unit的信息的介绍通过systemctl命令控制Serviceunit的DemoServiceunit配置文件内容,权值的一些介绍傍晚时分,你坐在屋檐下,看着天慢慢地黑... 查看详情

shell脚本自动化配置ssh免密登录和取消ssh免密配置脚本(代码片段)

1.前文2.实现代码#!/bin/bash#Author:cosann#Version:0.2#date:2022/7/27#description:批量部署SSH免密登录脚本E_ERROR=65#传参检测if[$#-ne1]thenecho-e"Usage:$0ip_list_file"exitE_ERRORfi#文件检测if[!-f"$1"]thenecho-e"IP_List_File$1文 查看详情

linux服务器免密登录配置(代码片段)

多台linux服务器之间,配置免密登录用处很方便首先在hadoop11这台机子上配置主机名映射vim/etc/hosts10.10.0.11hadoop1110.10.0.12hadoop1210.10.0.13hadoop13生成公钥、私钥ssh-keygen-trsa然后一路回车分别发送公钥到3台主机ssh-copy-idhadoop11ssh-copy-... 查看详情

互信的配置

1、互信配置ssh-keygen-trsa-P‘’-f~/.ssh/id_rsassh-copy-id-i~/.ssh/id_rsa.pubroot@对方ip1.1配置互信之前:1.2生成秘钥1.3复制秘钥1.4免密远程互信建立成功2、本机免密本机免密的操作类似ssh-keygen-trsa-P‘’-f~/.ssh/id_rsacat~/.ssh/id_rsa.pub>&g... 查看详情

rsa公钥体系与在ssh中免密的登陆的应用(代码片段)

一、秘钥体系    第一部分查看书籍为北京大学出版社出版的丘维声老师的数学思维方式与创新    在之前安全协议的讲解中,很多的协议都是用了秘钥的这一概念,相信很多同学对这不求甚解,下面我来系统的... 查看详情

关于linux中系统调优的一些笔记(代码片段)

写在前面推送的的邮件里看到有大佬讲的公共课,听了之后这里整理学习笔记。因为是公开课,所以讲的很浅,没接触过,这里做为了解,长长见识。博文内容包括系统调优原理概述如何检测系统的性能瓶颈... 查看详情

关于linux中keepalived高可用热备自动化部署的一些笔记(代码片段)

写在前面今天和小伙伴们分享一些Keepalived相关笔记博文内容涉及:vrrp协议由来Ansible方式Keepalived安装部署Keepalived脚本方式配置服务检查Keepalived自动化部署Ansible角色编写食用方式:需要Linux、Ansible基础知识理解不足小伙... 查看详情

关于linux中keepalived高可用热备自动化部署的一些笔记(代码片段)

写在前面今天和小伙伴们分享一些Keepalived相关笔记博文内容涉及:vrrp协议由来Ansible方式Keepalived安装部署Keepalived脚本方式配置服务检查Keepalived自动化部署Ansible角色编写食用方式:需要Linux、Ansible基础知识理解不足小伙... 查看详情