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 root@10.0.0.31
[root@ansible ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.32
[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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342