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