SSH 免密登陆

Linux System Environment

[root@ansible ~]# cat /etc/redhat-release                #==》系统版本
CentOS Linux release 7.5.1804 (Core)
[root@ansible ~]# uname –r                               #==》系统内核
3.10.0-862.el7.x86_64
[root@ansible ~]# uname -m                              #==》系统位数
x86_64
[root@ansible ~]# echo $LANG                            #==》系统字符集
en_US.UTF-8
[root@ansible ~]# ssh –V                                #==》SSH版本
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

SSH Function
1、远程登陆linux
2、使用密码或密钥对验证登陆远程Linux
3、实现批量管理linux服务器(功能较差,建议使用ansible)

SSH Note
1、ssh默认端口22,使用ssh协议
2、服务端配置文件/etc/ssh/sshd_config
3、客户端配置文件/etc/ssh/ssh_config(基本不用)
4、SSH协议有两个版本,SSH 1.x和SSH 2.x,建议使用 SSH 2.x版本
5、SSH采用密钥对验证,公钥(锁)和私钥(钥匙)
6、SSH采用加密算法有RSA和DSA算法,RSA可以加密也可以数字签名实现认证,DSA只能数字签名实现认证,不指定参数默认创建是RSA

SSH命令参数

1、-p    #==》指定远程连接端口
2、-i    #==》指定公钥文件
3、-t    #==》指定生成密钥算法(RSA和DSA )

SSH配置优化
标注:修改SSH配置文件 /etc/ssh/sshd_config(根据需求选择)

Port  52113                     #==》建议使用大于10000以上的端口
PermitRootLogin no              #==》禁止root远程登录
PermitEmptyPasswords no         #==》禁止使用空密码远程登录
UseDNS no                       #==》不使用dns解析
GssAPIAuthentication no         #==》解决连接ssh缓慢问题
PasswordAuthentication no       #==》禁用ssh用密码登陆,只能使用密钥对验证登陆
ListenAddress 0.0.0.0           #==》指定远程监控的IP地址,此地是指定本机网卡IP地址,也可以指定多个监听端口
  •  
  •  

一、SSH服务免密配置

主机规划

外网IP地址             内网IP地址             计算名           备注
10.0.0.30             172.16.1.30           ansible         SSH服务端(私钥)
10.0.0.31             172.16.1.31           test01          SSH客户端(公钥)
10.0.0.32             172.16.1.32           test02          SSH客户端(公钥)

1、配置阿里云Yum源

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache

2、Yum安装SSH软件(默认已经安装)

yum -y install openssh openssl
rpm -qa openssh openssl

3、启动SSH服务并设置开机自启动

systemctl start sshd
systemctl enable sshd
systemctl status sshd

4、创建密钥对

[root@ansible ~]# ssh-keygen                            #==》默认生成rsa算法的密钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #==》密钥保存路径,按回车确认即可
Enter passphrase (empty for no passphrase):              #==》设置密钥文件密码,按回车确认即可
Enter same passphrase again:                             #==》确认密钥文件密码,按回车确认即可
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Nk/4iqnAvJxQs+0PbmSlKWZnCddlCiP9C+b5TwGjtG4 root@ansible
The key's randomart image is:
+---[RSA 2048]----+
| . |
| . + o |
| ..=o+ |
| ..+o=o . |
| o=oB .S . |
| ++=@ .. * |
|.o=*E. . o |
| o B...+ . |
| +.+o+.o |
+----[SHA256]-----+
[root@ansible ~]# ls -l /root/.ssh/
total 8
-rw------- 1 root root 1679 Aug 5 14:34 id_rsa             #==》私钥
-rw-r--r-- 1 root root 394 Aug 5 14:34 id_rsa.pub           #==》公钥

5、私钥保存在SSH服务端,公钥发送给客户端

#==》首次登陆会提示确认信息与输入客户端root密码验证
[root@ansible ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
[root@ansible ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
[root@ansible ~]# ls /root/.ssh/
id_rsa  id_rsa.pub  known_hosts
[root@ansible ~]# cat /root/.ssh/known_hosts #==》记录SSH服务端首次登陆客户端信息
10.0.0.31 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDj4xnopm/g0G8uaIsClu2iOZz/ERogK6z+J8fjlqaue60vbasDgEgBTkjp7HSLXUffGvD4xT/elTj71V6WKmH8=
10.0.0.32 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDj4xnopm/g0G8uaIsClu2iOZz/ERogK6z+J8fjlqaue60vbasDgEgBTkjp7HSLXUffGvD4xT/elTj71V6WKmH8=

6、SSH服务端登陆SSH客户端测试

[root@ansible ~]# ssh 10.0.0.31                   #==》登陆SSH客户端10.0.0.31
Last login: Mon Aug 5 14:50:00 2019 from 10.0.0.30
[root@test01 ~]# hostname
test01
[root@test01 ~]# hostname -I
10.0.0.31 172.16.1.31
[root@ansible ~]# ssh 10.0.0.32                   #==》登陆SSH客户端10.0.0.32
Last login: Mon Aug 5 14:39:06 2019 from 10.0.0.1
[root@test02 ~]# hostname
test02
[root@test02 ~]# hostname -I
10.0.0.32 172.16.1.32

7、SSH客户端10.0.0.31生成的公钥文件

[root@test01 ~]# ls -l /root/.ssh/
total 4
-rw------- 1 root root 394 Aug 5 14:40 authorized_keys
  •  
  •  

二、Shell脚本实现批量免密操作

主机规划
标注:优化SSH配置文件两项
UseDNS yes 修改成 no
GSSAPIAuthentication yes 修改 no

外网IP地址             内网IP地址             计算名           备注
10.0.0.30             172.16.1.30           ansible         SSH服务端(私钥)
10.0.0.31             172.16.1.31           test01          SSH客户端(公钥)
10.0.0.32             172.16.1.32           test02          SSH客户端(公钥)

1、SSH服务端操作
标注:sshpass工具解决SSH命令行指定密码登陆

[root@ansible ~]# yum -y install sshpass                          #==》安装sshpass工具免密码输入
[root@test02 ~]# mkdir -p /server/scripts/
[root@ansible ~]# vim /server/scripts/ssh_sent.sh 
#!/bin/bash

if [ -f /root/.ssh/id_rsa ];then
   echo "----------密钥对已经存在---------------"
else
   echo "----------正在生成密钥对---------------"
   ssh-keygen -f /root/.ssh/id_rsa -N '' > /dev/null 2>&1
fi

for i in {31,32}
do
    echo "正在操作:172.16.1.${i}"
    echo "----------正在分发--------"
    sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.${i} -o StrictHostKeyChecking=no > /tmp/ssh.log 2>&1
    echo "----------正在备份SSH配置-----"
    ssh 172.16.1.${i} "\cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak"
    echo "----------正在优化SSH配置----"
    ssh 172.16.1.${i} "sed -i 's@#UseDNS yes@UseDNS no@g' /etc/ssh/sshd_config"
    ssh 172.16.1.${i} "sed -i 's@#GSSAPIAuthentication yes@GSSAPIAuthentication no@g' /etc/ssh/sshd_config"
    sleep 2
    echo "----------测试优化后的连接"
    ssh 172.16.1.${i}  hostname
done
[root@ansible ~]# sh /server/scripts/ssh_sent.sh
[root@ansible ~]# sh /server/scripts/ssh_sent.sh 
----------正在生成密钥对---------------
正在操作:172.16.1.31
----------正在分发--------
----------正在备份SSH配置-----
----------正在优化SSH配置----
----------测试优化后的连接
test01
正在操作:172.16.1.32
----------正在分发--------
----------正在备份SSH配置-----
----------正在优化SSH配置----
----------测试优化后的连接
test02
[root@ansible ~]# ls -l /root/.ssh/
total 12
-rw------- 1 root root 1675 Aug  5 15:53 id_rsa
-rw-r--r-- 1 root root  394 Aug  5 15:53 id_rsa.pub
-rw-r--r-- 1 root root  346 Aug  5 15:53 known_hosts
[root@ansible ~]# ssh 172.16.1.31
Last login: Mon Aug  5 15:35:31 2019 from 172.16.1.30
[root@test01 ~]# hostname
test01
[root@ansible ~]# ssh 172.16.1.32
Last login: Mon Aug  5 15:35:36 2019 from 172.16.1.30
[root@test02 ~]# hostname
test02

2、SSH客户端检查

[root@test01 ~]# ls -l /root/.ssh/
total 4
-rw------- 1 root root 394 Aug  5 15:53 authorized_keys
[root@test01 ~]# cat /etc/ssh/sshd_config | egrep -i "^UseDNS|^GSSAPIAuthentication"
GSSAPIAuthentication no
UseDNS no

 

你可能感兴趣的:(ssh)