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