Linux_综合架构_ssh基于密钥_远程连接

 

 

ssh远程连接原理过程:

客户端:                                                    服务端

01:客户端执行远程连接命令,向服务端发送发送远程连接请求 ssh 10.0.0.31

02:服务端接受到远程连接请求,会发送确认信息

03:客户端进行确认操作(yes),接受到一个公钥文件信息,将文件信息保存到~/.ssh/known_hosts文件中

04:客户端进行密码确认操作,输入正确密码

05:服务端确认客户端输入密码是否正确,如果密码正确,远程建立连接

 

SSH远程连接基于秘钥方式连接

客户端(管理端)     服务端SSHD(被管理端) 公钥--私钥

初始状态:基于密码远程连接

01:客户端创建一个秘钥对信息(私钥-钥匙  公钥-锁头)

02:客户端将公钥传输给被管理主机

03:客户端执行远程远程连接命令,向服务端发送远程连接请求

04:服务端接受远程连接请求,会发送确认信息

05:客户端进行确认(yes),接受一个公钥文件信息,将文件信息保存到 ~/.ssh/known_hosts文件中

06:服务端向客户端发送公钥质询信息(我这里有一把锁,你能打开?)

07:客户端接受到质询信息信息,会利用私钥解密公钥(用自己的要是打开锁头)

08:将解密后的消发送给管理端

09:远程连接建立成功

 

SSH实现基于秘钥连接方法:
    第一个历程: 在管理端创建秘钥对
    ssh-keygen -t dsa
    [root@backup ~]# ll ~/.ssh/id*
    -rw------- 1 root root 668 Oct 28 12:38 /root/.ssh/id_dsa      --- 私钥--钥匙
    -rw-r--r-- 1 root root 601 Oct 28 12:38 /root/.ssh/id_dsa.pub  --- 公钥--锁头
    
    第二个历程: 将公钥进行分发
    ssh-copy-id -i ~/.ssh/id_dsa.pub root@172.16.1.31
    [root@nfs01 ~]# ll ~/.ssh/
    total 8
    -rw------- 1 root root 601 Oct 28 12:42 authorized_keys

    第三个历程: 验证测试
    ssh 10.0.0.31 hostname

 

如何批量分发公钥

准备:yum install -y sshpass

sshpass - noninteractive ssh password provider

  非交互提供SSH连接密码信息

sshpass -p123456 ssh 172.16.1.7 -o StringHostKeyChecking=no 

情况一:密码信息一致,端口信息一致 

 

编写批量分发脚本:
    [root@m01 scripts]# cat fenfa_key.sh 
    #!/bin/bash
    
    . /etc/init.d/functions
    
    for ip in {7,31,41}
    do
       sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.$ip -o StrictHostKeyChecking=no &>/dev/null
       if [ $? -eq 0 ]
       then
          action   "主机 172.16.1.$ip"     /bin/true
          echo   ""
       else
          action   "主机 172.16.1.$ip"     /bin/false
          echo   ""
       fi
    done

 

 

情况二:密码信息不一致  端口号码信息不一致 

 

172.16.1.7   root   123456  ssh:52111
sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7 -o StrictHostKeyChecking=no  -p52111

172.16.1.31  root   654321  ssh:52112
sshpass -p654321 ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31 -o StrictHostKeyChecking=no -p52112

172.16.1.41  root   123123  ssh:52113
sshpass -p123123 ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41 -o StrictHostKeyChecking=no -p52113

 

第一步:编写文件

[root@m01 ~]# cat /server/scripts/host_ip_port_pass.txt 
172.16.1.7  ****** 51110 web01
172.16.1.8  ****** 51111 web02
172.16.1.31 ****** 51112 nfs01
172.16.1.41 ****** 51113 backup

 

 第二步:编写脚本

[root@m01 scripts]# vim fenfa_key02.sh 
    #!/bin/bash
    . /etc/init.d/functions
    cat /server/scripts/host_ip_port_pass.txt|\
    while read line
    do
       IP_info=$(echo $line|awk '{print $1}')
       Pass_info=$(echo $line|awk '{print $2}')
       Port_info=$(echo $line|awk '{print $3}')
       sshpass -p$Pass_info ssh-copy-id -i ~/.ssh/id_rsa.pub root@$IP_info  -o StrictHostKeyChecking=no -p$Port_info &>/dev/n
    ull
       if [ $? -eq 0 ]
       then
          action "host $IP_info 分发秘钥"    /bin/true
          echo ""
       else
          action "host $IP_info 分发秘钥"    /bin/false
          echo ""
       fi
    done

 

远程服务配置文件信息

vim /etc/ssh/sshd_config
Port 52111              --- 修改服务端口号码
ListenAddress 0.0.0.0   --- 监听本地网卡上数据流量信息,并作出响应          
                                0.0.0.0  监听所有网卡流量
                    10.0.0.7 只监听本地eth0网卡流量作出响应
                                PS: 监听配置的地址必须是本地网卡上有的地址  
PermitRootLogin no      --- 可以禁止root用户登录
PermitEmptyPasswords no --- 禁止空密码登录系统
PasswordAuthentication no   --- 是否允许密码方式进行验证
GSSAPIAuthentication no     --- 提升远程连接速度
UseDNS no                   --- 是否进行DNS反向解析过程    
AuthorizedKeysFile    .ssh/authorized_keys    --- 加载指定公钥文件 

远程服务入侵案例说明

裸奔的后果!一次ssh被篡改的入侵事件:https://www.cnblogs.com/liujiacai/p/8598294.html

 1) 用密钥登录,不用密码登陆。
    2) 牤牛阵法:解决SSH安全问题
       a. 防火墙封闭SSH,指定源IP限制(局域网、信任公网)
       b. 开启SSH只监听本地内网IP(ListenAddress 172.16.1.61)。
    3) 尽量不给服务器外网IP
    4) 最小化(软件安装-授权)
    5) 给系统的重要文件或命令做一个指纹
       /etc/passwd  /etc/profile  /etc/rc.local  /var/spool/cron/root  
    6) 给他锁上 chattr +i +a

 

  

posted @ 2019-10-28 19:41  堪舆先森  阅读(405)  评论(0编辑  收藏  举报