万字详解SSH(SSH登录原理+SSH配置+模拟实现SSH免密登录)
文章目錄
- 一、SSH概述
- 1. 加密算法
- 1)對(duì)稱(chēng)加密算法(DES)
- 2)非對(duì)稱(chēng)加密(RSA)
- 3) 對(duì)稱(chēng)加密與非對(duì)稱(chēng)加密區(qū)別
- 4)中間人攻擊
- 2. 環(huán)境準(zhǔn)備
- 3. SSH基于用戶(hù)名密碼的認(rèn)證原理
- 4. 小結(jié)
- 二、模擬SSH服務(wù)搭建
- 1. 搭建思路
- 2. VMware環(huán)境準(zhǔn)備
- 3. 通過(guò)jumpserver 和 realserver搭建SSH服務(wù)器
- 1. 關(guān)閉防火墻和SELinux
- 2.配置yum源
- 3. 配置靜態(tài)ip
- 1)JumpServer網(wǎng)卡配置
- 2)RealServer網(wǎng)卡配置
- 4. openssh軟件的安裝
- 1) 安裝
- 2)獲取openssh生成的文件列表
- 3)查看并修改ssh服務(wù)端的配置文件
- 三、SSH服務(wù)任務(wù)解決方案
- 1. 創(chuàng)建用戶(hù)并授權(quán)
- 2. 測(cè)試用戶(hù)權(quán)限
- 3. 禁用root遠(yuǎn)程連接登錄
- 4. 更改SSH默認(rèn)端口
- 5. 重啟SSH服務(wù)
- 6. 在RealServer創(chuàng)建一個(gè)hhy賬號(hào)測(cè)試ssh
- 7. SSH客戶(hù)端不驗(yàn)證指紋
- 8. 專(zhuān)業(yè)工具pwgen生成用戶(hù)密碼
- 9. 踢出用戶(hù)
- 四、SSH免密登錄解決方案
- 1. ssh連接
- 2. SSH免密登錄的具體實(shí)現(xiàn)
- 1. 方法1(常用)
- 2. 方法2(集群常用)
一、SSH概述
ssh是一種用于安全訪(fǎng)問(wèn)遠(yuǎn)程服務(wù)器的協(xié)議,遠(yuǎn)程管理工具。對(duì)比起telnet,它更加的安全,那么它是如何保證安全的呢?
1. 加密算法
1)對(duì)稱(chēng)加密算法(DES)
總結(jié):
-
發(fā)送方和接收方使用的是同一個(gè)密鑰來(lái)進(jìn)行加密和解密
-
發(fā)送方使用密鑰將明文數(shù)據(jù)加密成密文,然后發(fā)送出去
-
對(duì)稱(chēng)加密里最關(guān)鍵的就是這個(gè)密鑰,客戶(hù)端和服務(wù)器需要約定好密鑰是啥
-
如果是客戶(hù)端生成了密鑰,就需要通過(guò)網(wǎng)絡(luò)告知服務(wù)器,密鑰是啥
-
密鑰本身也在網(wǎng)絡(luò)上文明傳輸,也容易被黑客獲取,一旦被黑客獲取到了了,后續(xù)的加密就失去了意義。
2)非對(duì)稱(chēng)加密(RSA)
引入非對(duì)稱(chēng)加密,使用非對(duì)稱(chēng)加密來(lái)對(duì)對(duì)稱(chēng)密鑰進(jìn)行加密
解密:
- 發(fā)送方使用接收方發(fā)送過(guò)來(lái)的公鑰將明文數(shù)據(jù)加密成密文,然后發(fā)送出去
- 接收方收到密文后,使用自己本地保留的私鑰將密文解密成明文進(jìn)行讀取
3) 對(duì)稱(chēng)加密與非對(duì)稱(chēng)加密區(qū)別
既然都有非對(duì)稱(chēng)加密了,為啥還非得用對(duì)稱(chēng)加密呢?
4)中間人攻擊
通過(guò)非對(duì)稱(chēng)加密的手段,確實(shí)是可以更安全的進(jìn)行數(shù)據(jù)傳輸,但是還有點(diǎn)問(wèn)題,就是客戶(hù)端是如何獲取到公鑰的?
如何保證客戶(hù)端獲取到的公鑰是真實(shí)可靠的,而不是黑客偽造的?
在https中可以引入證書(shū)來(lái)抵制中間人攻擊問(wèn)題,那么ssh呢?
2. 環(huán)境準(zhǔn)備
| 192.168.44.129/24 | jumpserver | 跳板機(jī) |
| 192.168.44.130/24 | realserver | 正真正內(nèi)部服務(wù)器 |
3. SSH基于用戶(hù)名密碼的認(rèn)證原理
命令:ssh [選項(xiàng)] 遠(yuǎn)程服務(wù)器的用戶(hù)名@遠(yuǎn)程服務(wù)器的IP地址
認(rèn)證原理:
示例:通過(guò)跳板機(jī)(jump)和主機(jī)(realserver)
命令:ssh root@192.168.44.130
如果是第一次訪(fǎng)問(wèn)則會(huì)出現(xiàn)一下內(nèi)容
無(wú)法確認(rèn)主機(jī)的真實(shí)性
說(shuō)明
當(dāng)客戶(hù)端輸入yes確認(rèn)對(duì)方的公鑰指紋后,server端的公鑰就會(huì)被存放到客戶(hù)機(jī)的用戶(hù)家目錄里~/.ssh/known_hosts文件中,下次再訪(fǎng)問(wèn)就直接通過(guò)密碼登錄,不需要再確認(rèn)公鑰。
4. 小結(jié)
- SSH是Linux下遠(yuǎn)程管理的工具,比telnet更安全
- SH的全稱(chēng)Secure Shell,安全的shell,是Client/Server架構(gòu),默認(rèn)端口號(hào)為22,TCP協(xié)議
- SSH其實(shí)用于商業(yè),而OpenSSH即為開(kāi)源的,在Linux中默認(rèn)安裝
二、模擬SSH服務(wù)搭建
1. 搭建思路
2. VMware環(huán)境準(zhǔn)備
為了最大程度的保護(hù)公司內(nèi)網(wǎng)服務(wù)器的安全,公司內(nèi)部有一臺(tái)服務(wù)器做跳板機(jī)(JumpServer)。運(yùn)維人員在維護(hù)過(guò)程中首先要統(tǒng)一登錄到這臺(tái)服務(wù)器,然后再登錄到目標(biāo)設(shè)備進(jìn)行維護(hù)和操作。由于開(kāi)發(fā)人員有時(shí)候需要通過(guò)跳板機(jī)登錄到線(xiàn)上生產(chǎn)環(huán)境查看一些業(yè)務(wù)日志,所以現(xiàn)在需要運(yùn)維人員針對(duì)不同的人員和需求對(duì)賬號(hào)密碼進(jìn)行統(tǒng)一管理,并且遵循權(quán)限最小化原則
| 192.168.44.132(NAT)+ IPADDR=192.168.80.22(僅主機(jī)) | jumpserver | 跳板機(jī) |
| 192.168.80.23 (僅主機(jī)) | realserver | 正真正內(nèi)部服務(wù)器 |
3. 通過(guò)jumpserver 和 realserver搭建SSH服務(wù)器
1. 關(guān)閉防火墻和SELinux
關(guān)閉防火墻命令:systemctl stop firewalld
關(guān)閉防火墻開(kāi)機(jī)自啟:systemctl disable firewalld
關(guān)閉selinux
命令:setenforce 0
修改配置文件永久關(guān)閉
vim /etc/selinux/config
SELINUX=disabled
2.配置yum源
把jumpserver主機(jī)配置外網(wǎng)yum源
把/etc/yum.repos.d/目錄下的文件全部打包,再刪除除了壓縮文件的所有文件
打包命令:tar -czf CentOS.tar.gz ./*
配置阿里云yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清理yum緩存
yum clean all
重新建立緩存
yum makecache
RealServer配置本地YUM源 => 把光盤(pán)鏡像作為倉(cāng)庫(kù)(自建YUM倉(cāng)庫(kù))
掛載光盤(pán)
創(chuàng)建目錄:mkdir /mnt/cdrom
掛載:mount -o ro /dev/sr0 /mnt/cdrom
給開(kāi)機(jī)執(zhí)行文件添加可執(zhí)行權(quán)限
命令:chmod +x /etc/rc.local
往開(kāi)機(jī)自啟文件里寫(xiě)入開(kāi)機(jī)自動(dòng)掛載光盤(pán)
命令:echo 'mount -o -ro /dev/sr0 /mnt/cdrom' >> /etc/rc.local
rc.local:開(kāi)機(jī)就會(huì)執(zhí)行的文件
備份/etc/yum.repos.d/下的文件,再把這些文及其全部刪除
在 /etc/yum.repos.d下創(chuàng)建一個(gè)本地yum源配置文集local.repo 文件
編輯配置文件
清空原來(lái)的yum緩存:yum clean all
創(chuàng)建新yum緩存:yum makecache
列出可用倉(cāng)庫(kù):yum repolist
3. 配置靜態(tài)ip
1)JumpServer網(wǎng)卡配置
注意:僅主機(jī)模式的ip要和Vmnet1在同一網(wǎng)段
給JumpServer配置兩張網(wǎng)卡(NAT模式 + 僅主機(jī)模式)
重啟網(wǎng)卡:systemctl restart network
查看僅主機(jī)模式的網(wǎng)卡:ifconfig
復(fù)制NET模式網(wǎng)卡的配置文件ens33,給僅主機(jī)模式的網(wǎng)卡ens36配置。
命令:cp ifcfg-ens33 ./ifcfg-ens36
編輯ens36網(wǎng)卡配置文件
保存退出,重啟網(wǎng)卡
systemctl restart network
關(guān)閉NetworkManager
Linux圖形化界面中的網(wǎng)絡(luò)管理器,有些時(shí)候我們?cè)O(shè)置了靜態(tài)IP。但是重啟網(wǎng)絡(luò)后,其并沒(méi)有生效或者和你設(shè)置的IP地址不一致,很可能是由于NetworkManager工具的影響。
命令:systemctl stop NetworkManager
命令:systemctl disable NetworkManager
2)RealServer網(wǎng)卡配置
注意:僅主機(jī)模式的ip要和Vmnet1在同一網(wǎng)段
把NAT模式的網(wǎng)卡更改為僅主機(jī)模式,然后設(shè)置一個(gè)靜態(tài)IP地址。
編輯/etc/sysconfig/network-scripts下的ens33網(wǎng)卡,保存退出重啟網(wǎng)卡
TYPE="Ethernet" BOOTPROTO="static" IPADDR=192.168.80.23 NATMASK=255.255.255.0 NAME="ens33" DEVICE="ens33" ONBOOT="yes"測(cè)試聯(lián)通性,因?yàn)閖umpserver和realserver都是僅主機(jī)模式,且在同一網(wǎng)段下,就可以ping一下
用jump主機(jī)ping一下real主機(jī)
4. openssh軟件的安裝
1) 安裝
SSH服務(wù)底層的軟件名稱(chēng)叫做openssh,open開(kāi)源,ssh就是ssh服務(wù)。openssh屬于C/S架構(gòu)軟件,其擁有客戶(hù)端與服務(wù)器端。
客戶(hù)端:ssh
服務(wù)端:openssh-server
把兩臺(tái)機(jī)器都安裝openssh
命令:yum install openssh -y
檢查openssh是否安裝成功
命令:rpm -qa | grep openssh或者
yum list installed | grep openssh
2)獲取openssh生成的文件列表
命令:rpm -ql openssh-server
# 配置文件 /etc/ssh/sshd_config /etc/sysconfig/sshd #ssh服務(wù)的主配置文件# 服務(wù)管理腳本 /usr/lib/systemd/system/sshd.service# 文件共享服務(wù) 提供文件上傳下載的服務(wù) /usr/libexec/openssh/sftp-server# 二進(jìn)制文件程序文件 /usr/sbin/sshd# 公鑰生成工具 /usr/sbin/sshd-keygen# man手冊(cè) /usr/share/man/man5/sshd_config.5.gz /usr/share/man/man8/sftp-server.8.gz /usr/share/man/man8/sshd.8.gz命令:rpm -ql openssh-clients
# 客戶(hù)端配置文件 /etc/ssh/ssh_config# 遠(yuǎn)程copy命令 服務(wù)器間進(jìn)行文件傳輸 /usr/bin/scp# sftp客戶(hù)端 上傳下載文件操作 /usr/bin/sftp /usr/bin/slogin /usr/bin/ssh /usr/bin/ssh-add /usr/bin/ssh-agent /usr/bin/ssh-copy-id /usr/bin/ssh-keyscan # 客戶(hù)端man手冊(cè) /usr/share/man/man1/scp.1.gz /usr/share/man/man1/sftp.1.gz /usr/share/man/man1/slogin.1.gz /usr/share/man/man1/ssh-add.1.gz /usr/share/man/man1/ssh-agent.1.gz /usr/share/man/man1/ssh-copy-id.1.gz /usr/share/man/man1/ssh-keyscan.1.gz /usr/share/man/man1/ssh.1.gz /usr/share/man/man5/ssh_config.5.gz /usr/share/man/man8/ssh-pkcs11-helper.8.gz3)查看并修改ssh服務(wù)端的配置文件
man 5 sshd_config
禁止realserver機(jī)器遠(yuǎn)程登錄root賬號(hào)
PermitRootLogin => yes or no,默認(rèn)為yes 代表允許通過(guò)root賬號(hào)遠(yuǎn)程登錄此服務(wù)器
修改/etc/ssh/sshd_config第38行配置文件
修改后重啟ssh服務(wù),命令:systemctl restart sshd
三、SSH服務(wù)任務(wù)解決方案
1. 創(chuàng)建用戶(hù)并授權(quán)
JumpServer跳板機(jī)創(chuàng)建用戶(hù)并授權(quán)
第一步:創(chuàng)建用戶(hù)與用戶(hù)組(前端組,tom與jerry)
創(chuàng)建前端組:groupadd html
創(chuàng)建html組內(nèi)用戶(hù)tom和jerry
useradd -g html
useradd -g html
為用戶(hù)添加密碼
命令:passwd [用戶(hù)名]
為開(kāi)發(fā)人員創(chuàng)建數(shù)據(jù)目錄并且設(shè)置相應(yīng)的權(quán)限
創(chuàng)建用戶(hù)數(shù)據(jù)目錄
命令:mkdir -p /code/html
更改目錄的文件所屬組(更改為html,代表html組內(nèi)成員可以對(duì)這個(gè)目錄進(jìn)行管理)
修改文件所屬組命令:chgrp -R html /code/html
給文件所屬組增加可寫(xiě)權(quán)限:chgrp g+w /code/html
添加粘滯位權(quán)限,防止誤刪除操作
去除其它用戶(hù)的讀寫(xiě)權(quán)限:chmod o=- /code/html
添加粘滯位命令:chmod +t /code/html
2. 測(cè)試用戶(hù)權(quán)限
只有自己的文件才可以刪除和修改
不是同組的用戶(hù)無(wú)法訪(fǎng)問(wèn)
3. 禁用root遠(yuǎn)程連接登錄
禁止realserver的root用戶(hù)遠(yuǎn)程登錄
修改配置文件命令:# vim /etc/ssh/sshd_config’
PermitRootLogin 設(shè)置為no
PermitRootLogin no
4. 更改SSH默認(rèn)端口
更改realserver機(jī)器ssh默認(rèn)端口號(hào)
修改配置文件命令:vim /etc/ssh/sshd_config
修改配置文件的第17行為 端口號(hào)為4567
5. 重啟SSH服務(wù)
systemctl restart sshd
或
systemctl reload sshd
restart與reload的本質(zhì)區(qū)別:
restart其實(shí)相當(dāng)于stop然后在start
reload不停止現(xiàn)有業(yè)務(wù),只是重新加載sshd對(duì)應(yīng)的配置文件
6. 在RealServer創(chuàng)建一個(gè)hhy賬號(hào)測(cè)試ssh
命令:useradd hhy
隨意設(shè)置一個(gè)密碼
測(cè)試從jumpserver遠(yuǎn)程連接realserver的hhy賬號(hào)
命令:ssh -p 4567 hhy@192.168.80.23
-p:指定端口號(hào)
前面修改了端口號(hào)為4567,所以要指定端口號(hào)。默認(rèn)的22就不需要指定
7. SSH客戶(hù)端不驗(yàn)證指紋
第一次連接遠(yuǎn)程服務(wù)器時(shí):
如果我們不想驗(yàn)證指紋
修改配置文件:vim /etc/ssh/ssh_config
第35行
改為 StrictHostKeyChecking no
8. 專(zhuān)業(yè)工具pwgen生成用戶(hù)密碼
其用戶(hù)密碼一定不要手工設(shè)置,建議使用專(zhuān)業(yè)的密碼生成工具如pwgen。
先配置EPEL源
命令:wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
清楚yum緩存:yum clean all
建新緩存:yum makecache
安裝pwgen密碼生成工具
命令:yum -y install pwgen -y
使用pwgen密碼生成工具
命令:pwgen -cnBs1 10 1
pwgen用法
9. 踢出用戶(hù)
查看當(dāng)前在線(xiàn)用戶(hù)
踢出某個(gè)賬號(hào)
命令:pkill -kill -t pts/1
四、SSH免密登錄解決方案
1. ssh連接
jumpserver 連接=> ssh hhy@realserver的ip地址
基于密鑰對(duì)的認(rèn)證方式
A主機(jī) => JumpServer,B主機(jī) => RealServer
第一步:在A主機(jī)(JumpServer)生成一個(gè)密鑰對(duì)(公鑰和私鑰)
第二步:把A主機(jī)的公鑰通過(guò)網(wǎng)絡(luò)拷貝到B主機(jī)(RealServer)上,然后把其內(nèi)容追加到B主機(jī)的~/.ssh/authorized_keys
第三步:由A主機(jī)(JumpServer)向B主機(jī)(RealServer)發(fā)起登錄請(qǐng)求,然后直接在B主機(jī)上進(jìn)行公鑰比對(duì)(判斷A主機(jī)的公鑰是否已經(jīng)存儲(chǔ)在B主機(jī)的authorized_keys文件中),如果存在且正確,則生成一個(gè)隨機(jī)的字符串(如itcast),然后使用A主機(jī)的公鑰對(duì)其加密得到加密的后字符串(如dXdh,34njasz!z.)
第四步:通過(guò)網(wǎng)絡(luò),由B主機(jī)講剛才生成的加密后的字符串傳輸給主機(jī)A,主機(jī)A接收到加密后的字符串以后,使用自己本地存儲(chǔ)的私鑰進(jìn)行解密操作(得到hhy)
第五步:把解密得到的itcast發(fā)送到B主機(jī),然后驗(yàn)證與剛才生成的字符串是否一致,如果一致,返回登錄成功。反之,則返回登錄失敗。
到此免密登錄全部完成!
2. SSH免密登錄的具體實(shí)現(xiàn)
SSH免密的實(shí)現(xiàn)思路一共分為三個(gè)步驟(三步走)
第一步:在A主機(jī)針對(duì)某個(gè)賬號(hào)(tom或jerry)生成公鑰與私鑰
第二步:使用某些方法把公鑰發(fā)送到B主機(jī)中,然后追加到authorized_keys文件中
第三步:測(cè)試是否實(shí)現(xiàn)免密登錄
1. 方法1(常用)
在 jumpserver的tom用戶(hù)生成公鑰和私鑰
命令:ssh-keygen
一路回車(chē)就好
查看公鑰和私鑰
在~/.ssh/下
使用ssh-copy-id把公鑰文件中的內(nèi)容傳輸?shù)椒?wù)器端的~/.ssh/authorized_keys文件中
命令:ssh-copy-id hhy@192.168.80.23
2. 方法2(集群常用)
這里使用另一個(gè)用戶(hù)jerry
命令:ssh-keygen
如果不想一路確認(rèn),可以在ssh-keygen -P “”,直接生成公私鑰
2. 把id_rsa.pub文件,scp到RealServer服務(wù)器端
3. 在RealServer服務(wù)器端,把id_rsa.pub文件中的內(nèi)容追加到~/.ssh/authorized_keys文件中
命令:cat id_rsa.pub >> ~/.ssh/authorized_keys
**注意:**以上配置也比較簡(jiǎn)單,但是實(shí)際應(yīng)用時(shí)要注意文件的權(quán)限
4. 測(cè)試免密是否成功
命令:ssh hhy@192.168.80.23
總結(jié)
以上是生活随笔為你收集整理的万字详解SSH(SSH登录原理+SSH配置+模拟实现SSH免密登录)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MYSQL之压测
- 下一篇: 有源滤波器和无源滤波器的区别及原理