一、SSH基本概念
1.什么時ssh
SSL(Secure Socket Layer即安全套接層)協議是Netscape Communication公司推出在網路傳輸層之上提供的一種基于非對稱密鑰和對稱密鑰技術的用于瀏覽器和Web服務器.
SSH為Secure Shell的縮寫,由IETF的網路作業小組(Network Working Group)所制定;SSH為建立在應用層和傳輸層基礎上的安全協議,在進行資料傳輸時,會對資料包進行加密處理,加密后在進行資料傳輸,確保了資料傳輸安全,
關于http和https
2.SSH功能:
1.提供遠程連接服務器(ssh、telnet)
2.提供遠程傳輸資料加密
3. SSH與Telnet區別
| 服務連接方式 | 服務資料傳輸 | 服務監聽埠 | 服務登陸用戶 |
|---|---|---|---|
| ssh | 加密 | 22/tcp | 默認支持root用戶登錄 |
| telnet | 明文 | 23/tcp | 不支持root用戶登錄 |
4 抓包分析SSH與Telnet
1.安裝
[root@localhost ~]# yum install telnet telnet-server -y
2.啟動
[root@localhost ~]# systemctl start telnet.socket
3.查看埠
[root@localhost ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 536/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 868/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1016/master
tcp6 0 0 :::111 :::* LISTEN 536/rpcbind
tcp6 0 0 :::22 :::* LISTEN 868/sshd
tcp6 0 0 :::23 :::* LISTEN 1/systemd
tcp6 0 0 ::1:25 :::* LISTEN 1016/master
[root@localhost ~]#
4.創建tom用戶(因為默認不支持root用戶登錄,所以創建普通用戶便于下面登錄)
5.下載安裝wireshark抓包分析
鏈接:https://pan.baidu.com/s/1XCcY646SpveAIpoxzywZVg
提取碼:ia4m

cmd客戶端連接剛才安裝telnet-server的ip 10.0.0.99,抓包追蹤tcp流,發現可以看見自己輸入的密碼

6.改為ssh連接 ssh root@10.0.0.99重新抓包追蹤tcp流

發現已經加密過了,
二、ssh客戶端命令
SSH有客戶端與服務端(C/S架構)
ssh|slogin遠程登陸
scp遠程拷貝
sftp檔案傳輸
ssh-copy-id秘鑰分發程式
1.遠程登錄
ssh 用戶名@目標主機ip -p 埠
[d:\~]$ ssh root@10.0.0.7 666
埠默認22可以不指定,如果服務端更改了埠,需要 -p+port 形式登錄,
組態檔/etc/ssh/sshd_config
2.scp遠程拷貝
scp復制資料至遠程主機命令(全量復制)
-P 指定埠,默認22埠可不寫
-r 表示遞回拷貝目錄
-p 表示在拷貝檔案前后保持檔案或目錄屬性不變
-l 限制傳輸使用帶寬(默認kb/8=MB)
推:
將本機 /tmp 下a.txt 推送到遠端10.0.0.99 /tmp目錄下
[root@web01 tmp]$ scp -rp a.txt root@10.0.0.99:/tmp
拉:
[root@web01 tmp]# scp -pr -P22 root@10.0.0.31:/etc/exports /tmp
#限速下載速度為1MB 1MB/s=1024kb/s=1024*8kbit/s=8192kbit/s
[root@web01 tmp]# scp -rp -l 8192 /opt/1.txt root@172.16.1.31:/tmp
1.scp通過ssh協議加密方式進行檔案或目錄拷貝,
2.scp連接時的用戶作為為拷貝檔案或目錄的權限,
3.scp支持資料推送和拉取,每次都是全量拷貝,效率較低,
三、SSH遠程驗證方式
1. 基于密碼驗證
知道服務器的IP埠,賬號密碼,即可通過ssh客戶端命令登陸遠程主機,
密碼太簡單容易破解;密碼太復雜容易忘記
2.基于秘鑰驗證
為了降低密碼泄露的機率和提高登陸的方便性,建議使用密鑰驗證方式,

3. 創建密鑰
在主機A上生成非對稱密鑰,使用-t指定密鑰型別, 使用-C指定用戶郵箱
ssh-keygen -t rsa -C 郵箱
# 創建密鑰
[root@web01 ~]# ssh-keygen -t rsa -C web01@qq.com
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:gL0dewzpd2LStl4YSXpt4CfH//6ZY4WJEHs9exFoe4Y web01@qq.com
The key's randomart image is:
+---[RSA 2048]----+
| . |
| o .. o . |
| . o + oo..o .|
| = Xo=.Eo+ |
| . S #oB.o=.|
| B @..+ o|
| o . ...|
| . . +o|
| . .+*|
+----[SHA256]-----+
[root@web01 ~]#
4. 推送公鑰到要登錄的服務器
將A的公鑰推送到B
ssh-copy-id [-i [identity_file]] [user@]machine
ssh-copy-id:命令
-i:指定下發公鑰的路徑
[user@]:以什么用戶身份進行公鑰分發(root),如果不輸入,表示以當前系統用戶身份分發公鑰
*machine:下發公鑰至那臺服務器, 填寫遠程主機IP地址
[root@web01 .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.31
推送過去后默認存在檔案 ~/.ssh/authorized_keys 中
5. 測驗連接
[root@web01 ~]# ssh 10.0.0.31
Last login: Fri Aug 6 19:39:43 2021 from 10.0.0.7
[root@rsync-server ~]#
# 在當前bash執行對方主機上的命令(不登錄對方)
[root@web01 ~]# ssh 10.0.0.31 -C "hostname -i"
fe80::20c:29ff:fe40:4989%eth1 10.0.0.31 172.16.1.31
[root@web01 ~]#
四、SSH實作跳板機
用戶通過Windows/MAC/Linux客戶端連接跳板機免密碼登錄,跳板機連接后端無外網的Linux主機實作免密登錄,架構圖如下,
多用戶登陸一臺服務器無密碼
單用戶登陸多臺服務器免密碼

1 . Windows下發密鑰
1.Xshell–>選擇工具->新建密鑰生成向導,生成公鑰對,選擇下一步
2.填寫秘鑰名稱,秘鑰增加密碼則不建議配置,繼續即可
3.生成秘鑰后,點擊Xshell->工具->用戶秘鑰管理者->選擇對應秘鑰的屬性–》公鑰
4.選擇對應秘鑰的公鑰,將其復制至跳板機~/.ssh/authorized_keys中,然后測驗
注意新建 .ssh目錄的權限700 authorized_keys的權限是600,創建的時候請注意修改,
[root@manager ~]# mkdir .ssh
[root@manager .ssh]# cd .ssh
[root@manager .ssh]# vim authorized_keys
[root@manager .ssh]# chmod 600 authorized_keys
[root@manager .ssh]# cd ..
[root@manager ~]# chmod 700 .ssh
用windows客戶端登錄跳板機manager(10.0.0.62)

2 Linux跳板機下發密鑰給集群中的所有主機
1.在跳板機上生成公鑰和私鑰,下發公鑰給集群中的所有主機
[root@manager .ssh]# ssh-keygen -t rsa -C manager@163.com
2.將跳板機上的公鑰推送給內網所有主機
假設內網有三臺主機如下:
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.1.32
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.1.31
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.1.7
3.禁止所有內網主機公網,嘗試windos先免密登錄跳板機,再用跳板機登錄任意一臺內網主機
[root@manager ~]# ssh 172.16.1.31
Last login: Fri Aug 6 19:44:59 2021 from 10.0.0.7
[root@rsync-server ~]# exit
logout
Connection to 172.16.1.31 closed.
You have new mail in /var/spool/mail/root
[root@manager ~]# ssh 172.16.1.32
Last login: Fri Aug 6 08:52:00 2021 from 10.0.0.1
[root@nfs ~]# exit
logout
Connection to 172.16.1.32 closed.
[root@manager ~]# ssh 172.16.1.7
Last login: Fri Aug 6 18:01:27 2021
[root@web01 ~]#
3. Teleport 堡壘機
此前的ssh免密雖然可以實作跳板,但是他有很多的缺陷:
1.無法知道有多少后端主機可以免密連接
2.沒有審計功能(無法知道用戶登陸上來操作了什么)
3.沒有很好的權限管理機制(無法為不同的用戶分配不同的主機)
所以我們可以使用 teleport web界面管理的跳板機來解決ssh的不足,
在使用teleport之前,我們需要完成此前免密的環境搭建,因為teleport是基于此前免密的的環境基礎之上實作,只不過新增了權限管理、主機管理、用戶管理等功能,

Teleport官網請戳我
安裝檔案請戳我
用windows下載完成后上傳到服務器,解壓
[root@manager ~]# tar -xf teleport-server-linux-x64-3.2.2.tar.gz
[root@manager ~]# cd teleport-server-linux-x64-3.2.2
[root@manager teleport-server-linux-x64-3.2.2]# ./setup.sh # 執行
[root@manager teleport-server-linux-x64-3.2.2]# netstat -lntp # 監聽7190埠
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:7190 0.0.0.0:* LISTEN 19184/tp_we
五、SSH基礎優化
SSH作為遠程連接服務,通常我們需要考慮到該服務的安全,所以需要對該服務進行安全方面的配置,
1.更改遠程連接登陸的埠(對外的服務器一定要修改
2.禁止ROOT管理員直接登錄
3.密碼認證方式改為密鑰認證
4.重要服務不使用公網IP地址(Redis\MySQL…)
5.使用防火墻限制來源IP地址
組態檔:
/etc/ssh/sshd_config
Port 6666 # 變更SSH服務遠程連接埠
PermitRootLogin no # 禁止root用戶直接遠程登錄
PasswordAuthentication no # 禁止使用密碼直接遠程登錄
UseDNS no # 禁止ssh進行dns反向決議,影響ssh連接效率引數
GSSAPIAuthentication no # 禁止GSS認證,減少連接時產生的延遲
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292606.html
標籤:其他
