zoukankan      html  css  js  c++  java
  • ssh免密码登录之分发密钥

    ssh免密码登录之分发密钥

    1、ssh免密码登录

    密码登录和密钥登录有什么不同?

    密码登录(口令登录),每次登录都需要发送密码(ssh)

    密钥登录,分为公钥和私钥,公钥相当于锁,私钥相当于钥匙

    1.1 生成密钥对(公钥和私钥)

    ssh-keygen

    ls -a .ssh/        查看公钥和私钥ls -a .ssh/

    1.2 发送公钥到要登录的机器(客户端)

    ssh-copy-id root@10.0.0.31

    authorized_keys存放公钥的文件

    1.3 测试免密钥登录

    ssh root@10.0.0.31

    ssh -v root@10.0.0.31    显示ssh连接过程

     

    2、远程只能用密钥登录

    2.1 配置免密码登录

    2.2 修改/etc/sshd/sshd.conf的66行

    PasswordAuthentication no

    对称加密:加密方法和解密一致

    非对称加密:公钥和私钥,公钥和私钥在一起完成(虎符)

     

    3、任意两台机器实现互相密钥登录的方法

    方法1:次数较多

    分别在每台机器上生成密钥对ssh-keygen

    将公钥分别发送给其他机器(较麻烦)ssh-copy-id root@10.0.0.31

    方法2:次数较少

    在一台机器上生成密钥对ssh-keygen

    在已登录的状态下将公钥发送给自己    ssh-copy-id root@10.0.0.41

    将.ssh目录发送到其他机器 scp -rp .ssh root@10.0.0.8:~

    -r    拷贝整个目录

    -p    保持属性

     

    4、免密码登录应用

    免密码登录可以在不登录到其他机器的情况下在其他机器上执行命令,批量执行多台机器的命令

    for n in 31 7 8;do ssh root@10.0.0.$n "hostname";done

    for n in 7 8 31 41;do ping 172.16.1.$n -c2;done

     

    5、ssh免密码登录之分发密钥

    利用expect解决非交互问题

    管理N台服务器的时候,普通的分发密钥方法会比较繁琐

    5.1 一键生成密钥对

    ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -P ''

    ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -P ''

    -t指定要创建的密钥类型

    -f指定密钥文件名

    -q安静模式

    -P提供(旧)密语

    检查生成的密钥对

    [root@backup ~]# ll .ssh/

    total 8

    -rw------- 1 root root 1675 Apr 27 17:18 id_dsa

    -rw-r--r-- 1 root root 393 Apr 27 17:18 id_dsa.pub

    5.2 将密钥对发送给自己

    ssh-copy-id root@10.0.0.41

    5.3 安装ecpect

    yum install expect –y

    5.4 expect脚本

    [root@backup scripts]# cat send_pub.sh

    #!/bin/bash

    for n in 7 8 31;

    do

    expect send_pub.exp 10.0.0.$n        #执行脚本并使其获取IP参数

    done

    [root@backup scripts]# cat send_pub.exp

    #!/usr/bin/expect

    #set timeout 20         #设置超时时间,,默认为10秒,这里注释掉了

    set IP [lindex $argv 0]        #获取参数IP

    spawn ssh-copy-id root@$IP        #监控执行的命令    spawn标签用于expect脚本中,实现交互

    expect "(yes/no)?"        #当遇到(yes/no)?情况时

    send "yes "            #输入yes并回车

    expect "password:"        #当遇到password:情况时

    send "123456 "        #输入密码并回车

    interact                #跳出控制台

    执行send_pub.sh即可批量给另外三台机器分发密钥

    5.5 检查结果

    ssh登录到其他机器,是否能直接登录

     

    6、免密码分发密钥两两可登录

    在5中通过一台机器批量分发密钥到其他机器实现免密钥登录到其他机器,这里进行升级批量分发密钥实现两两可免密钥登录

    [root@backup scripts]# cat yijian.sh

    #!/bin/bash

    ###NO.1

    ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -P ''        #一键生成密钥对

     

    ###NO.2

    for n in 41 31 7 8;

    do

    expect key_self.exp 10.0.0.$n        #执行脚本并使其获取IP参数

    done

     

    ###NO.3

    for n in 31 7 8;

    do

    scp -rp /root/.ssh root@10.0.0.$n:/root        #将.ssh下的所有文件发送到其他机器

    done

    [root@backup scripts]# cat key_self.exp

    #!/usr/bin/expect

    #set timeout 20         

    set IP [lindex $argv 0]        

    spawn ssh-copy-id root@$IP        

    expect "(yes/no)?"

    send "yes "

    expect "password:"        

    send "123456 "    

    interact        

    执行yijian.sh即可实现目标

     

    7、expect脚本应用

    利用expect监控passwd命令

    expect passwd.exp 旧密码 新密码    执行即可实现passwd非交互

    [root@backup scripts]# cat passwd.exp

    #!/usr/bin/expect

    set old [lindex $argv 0]        #获取参数旧密码

    set new [lindex $argv 1]        #获取参数新密码

    spawn passwd

    expect "(current) UNIX password:"

    send "$old "

    expect "New password:"

    send "$new "

    expect "Retype new password:"

    send "$new "

    interact

     

    博主原创文章,转载请务必注明出处

  • 相关阅读:
    在 Windows 上测试 Redis Cluster的集群填坑笔记
    vmware安装黑苹果教程
    微信支付v3发布到iis时的证书问题
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(安装篇SQL Server on linux)
    Linux下安装SQL Server 2016(准备篇SQL Server on linux)
    客服端与服务端APP支付宝支付接口联调的那些坑
    ASP.NET MVC]WebAPI应用支持HTTPS的经验总结
    .net平台下C#socket通信(中)
  • 原文地址:https://www.cnblogs.com/ssgeek/p/9220916.html
Copyright © 2011-2022 走看看