2024年最全SSH攻防一體命令備忘清單
1.關(guān)于SSH
SSH(縮寫為“Secure Shell”或“Secure Socket Shell”)是一種網(wǎng)絡(luò)協(xié)議,用于通過不安全的網(wǎng)絡(luò)安全地訪問網(wǎng)絡(luò)服務(wù)。它包括實現(xiàn)SSH的一套實用工具,例如:
- ssh-keygen:用于為 SSH 創(chuàng)建新的身份驗證密鑰對;
- SCP(安全復(fù)制協(xié)議):用于在網(wǎng)絡(luò)上的主機之間復(fù)制文件;
- SFTP(安全文件傳輸協(xié)議):用于發(fā)送和接收文件。它是FTP(文件傳輸協(xié)議)的SSH安全版本,它已取代 FTP 和 FTPS(FTP 安全)成為通過 Internet 共享文件的首選機制。
默認情況下, SSH服務(wù)器在標(biāo)準(zhǔn)傳輸控制協(xié)議(TCP) 端口22上監(jiān)聽連接。但也可以自定義其他端口, 但要注意避免端口沖突的問題。
SSH可以安全地管理遠程系統(tǒng)和應(yīng)用程序,例如通過網(wǎng)絡(luò)登錄到另一臺計算機、執(zhí)行命令以及將文件從一臺計算機移動到另一臺計算機。高級SSH功能是創(chuàng)建安全隧道以遠程運行其他應(yīng)用程序協(xié)議。
2.基本SSH命令
以下是整理的SSH命令清單:
命令 | 功能描述 |
ssh | 連接到遠程服務(wù)器 |
ssh pi@raspberry | raspberry以用戶身份pi通過默認 SSH 端口 22連接到設(shè)備 |
ssh pi@raspberry -p 3344 | raspberry以用戶身份pi通過3344端口連接到設(shè)備 |
ssh -i /path/file.pem admin@192.168.1.1 | 以root用戶身份通過密鑰文件/path/file.pemadmin連接192.168.1.1 |
ssh root@192.168.2.2 'ls -l' | 以root用戶身份連接192.168.2.2并執(zhí)行遠程命令ls -l |
$ ssh user@192.168.3.3 bash < script.sh | 調(diào)用當(dāng)前工作目錄中的腳本script.sh,以user用戶身份連接192.168.3.3 |
ssh friend@Best.local "tar cvzf - ~/ffmpeg" > output.tgz | 以friend用戶身份登錄遠程主機Best.local, 并在遠程主機上對 ~/ffmpeg 目錄進行壓縮,并將壓縮后的結(jié)果傳輸?shù)奖镜刂鳈C上的 output.tgz 文件 |
ssh-keygen | 生成SSH密鑰 |
ssh-keygen -F [ip/hostname] | 從~/.ssh/known_hosts文件(已登錄的主機)中搜索某個IP地址或主機名 |
ssh-keygen -R [ip/hostname] | 從~/.ssh/known_hosts文件(已登錄的主機)中刪除某個IP地址或主機名 |
ssh-keygen -f ~/.ssh/filename | 指定文件名 |
ssh-keygen -y -f private.key > public.pub | 從私鑰生成公鑰 |
ssh-keygen -c -f ~/.ssh/id_rsa | 更改密鑰文件~/.ssh/id_rsa`的注釋 |
ssh-keygen -p -f ~/.ssh/id_rsa | 更改私鑰~/.ssh/id_rsa`的密碼 |
ssh-keygen -t rsa -b 4096 -C "my@email.com" | 生成一個帶有注釋 "my@email.com" 的RSA 4096位密鑰:-t:密鑰類型 ( rsa, ed25519, dsa, ecdsa) -b:密鑰中的位數(shù) -C:提供新注釋 |
scp | 在服務(wù)器之間安全地復(fù)制文件 |
scp user@server:/folder/file.ext dest/ | 從遠程復(fù)制到本地目的地dest/ |
scp dest/file.ext user@server:/folder | 從本地復(fù)制到遠程 |
scp user1@server1:/file.ext user2@server2:/folder | 在兩個不同服務(wù)器之間復(fù)制 |
scp user@server:/folder/* . | 從服務(wù)器文件夾復(fù)制到本地計算機上的當(dāng)前文件夾 |
scp -r | 遞歸復(fù)制整個目錄 |
scp -r user@server:/folder dest/ | 將整個文件夾復(fù)制到本地目的地dest/ |
scp user@server:/folder/* dest/ | 將文件夾中的所有文件復(fù)制到本地目標(biāo)dest/ |
scp -C | 壓縮數(shù)據(jù)的選項 |
scp -v | 打印詳細信息的選項 |
scp -p | 保留傳輸文件的最后修改時間戳的選項 |
scp -P 8080 | 連接到遠程主機端口 8080 的選項 |
scp -B | 批處理模式選項并阻止輸入密碼串 |
sftp | 在服務(wù)器之間安全地傳輸文件 |
sftp -p | 保留傳輸文件的最后修改時間戳的選項 |
sftp -P 8080 | 連接到遠程主機端口8080 |
sftp -r | 上傳和下載時遞歸復(fù)制整個目錄。SFTP不跟蹤樹遍歷中遇到的符號鏈接。 |
3.SSH配置和選項
以下命令記錄了SSH如何在不同機器上記錄登錄憑據(jù):
命令 | 功能描述 |
man ssh_config | 打開OpenSSH SSH 客戶端配置文件。本手冊列出了可以更改的所有OpenSSH參數(shù)。 |
cat /etc/ssh/ssh_config | less | 查看OpenSSH 客戶端系統(tǒng)范圍的配置文件 |
cat /etc/ssh/sshd_config | less | 查看OpenSSH服務(wù)器系統(tǒng)范圍的配置文件;“d”代表服務(wù)器“守護進程” |
cat ~/.ssh/config | less | 查看SSH客戶端用戶特定的配置文件 |
cat ~/.ssh/id_{type} | less | 查看SSH客戶端私鑰;type是 中的任何一個rsa, ed25519, dsa, ecdsa |
cat ~/.ssh/id_{type}.pub | less | 查看SSH客戶端公鑰;type是 中的任何一個rsa, ed25519, dsa, ecdsa |
cat ~/.ssh/known_hosts | less | 查看SSH客戶端登錄的主機 |
cat ~/.ssh/authorized_keys | less | 查看SSH客戶端授權(quán)登錄密鑰 |
ssh-agent | 保存用于公鑰身份驗證的私有 SSH 密鑰(RSA、DSA、ECDSA、Ed25519) |
ssh-agent -E fingerprint_hash | 指定顯示密鑰指紋時使用的哈希算法。有效fingerprint_hash選項是sha256(默認)和md5 |
ssh-agent -t lifetime | 設(shè)置lifetime身份/私鑰的最大值,可由 中的相同設(shè)置覆蓋ssh-add。 生命周期示例:? 600= 600 秒(10 分鐘) ? 23m= 23 分鐘 ? 1h45= 1 小時 45 分鐘 |
ssh-add | 將 SSH 密鑰添加到ssh-agent |
ssh-add -l | 列出緩存的私鑰ssh-agent |
ssh-add -t lifetime | 設(shè)置lifetime身份/私鑰的最大值。示例lifetime:? 600= 600 秒(10 分鐘) ? 23m= 23 分鐘 ? 1h45= 1 小時 45 分鐘 |
ssh-add -L | 列出所有已保存身份的公鑰參數(shù) |
ssh-add -D | 刪除所有緩存的私鑰 |
ssh-copy-id | 在遠程服務(wù)器上復(fù)制、安裝和配置SSH密鑰 |
ssh-copy-id user@server | 將SSH密鑰復(fù)制到 aserver作為user |
ssh-copy-id server1 | server1使用默認登錄名復(fù)制到某個別名服務(wù)器 |
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server | 將特定密鑰復(fù)制到服務(wù)器上作為一個用戶 |
4.遠程服務(wù)器管理
SSH服務(wù)器的操作系統(tǒng)大多是Unix/Linux,因此通過SSH登錄服務(wù)器后,以下命令與Unix/Linux中的命令基本相同。
命令 | 功能描述 |
cd | 更改當(dāng)前工作目錄 |
kill | 停止正在運行的進程 |
ls | 列出文件和目錄 |
mkdir | 創(chuàng)建一個新目錄 |
mv | 移動文件或目錄 |
nano | 使用 Nano 在終端中編輯文件 |
ps | 列出正在運行的進程 |
pwd | 顯示當(dāng)前工作目錄 |
tail | 查看文件的最后幾行(默認為 10 行) |
top | 監(jiān)控系統(tǒng)資源和進程 |
touch | 創(chuàng)建新文件或更新現(xiàn)有文件的時間戳 |
vim | 使用 Vim 在終端中編輯文件 |
exit | 關(guān)閉 SSH 會話 |
以下是在Windows10上使用PowerShell通過SSH訪問網(wǎng)絡(luò)計算機上的賬戶:
5.高級SSH命令
在下表中,列出了一些可以幫助完成網(wǎng)絡(luò)管理任務(wù)的復(fù)雜SSH實用程序, 包括: SSH文件系統(tǒng)(SSHFS)、數(shù)據(jù)壓縮和X11轉(zhuǎn)發(fā)。
要通過SSH進行X11轉(zhuǎn)發(fā), 需要執(zhí)行三個步驟:
(1) 要實現(xiàn)X11轉(zhuǎn)發(fā),在配置文件~/.ssh/config配置以下參數(shù):
Host*
ForwardAgent yes
ForwardX11 yes
(2) 要允許X11執(zhí)行, 在配置文件:/etc/ssh/sshd_config中配置以下參數(shù):
- X11Forwarding yes
- X11DisplayOffset 10
- X11UseLocalhost no
(3) 在服務(wù)器中安裝xauth,設(shè)置X11身份驗證。
命令 | 功能描述 |
sshfs | 將遠程服務(wù)器的文件系統(tǒng)掛載到本地目錄上。在使用前將此程序安裝。安裝命令示例: ? sudo apt install sshfs # Ubuntu/Debian ? sudo yum install fuse-sshfs # CentOS |
ssh -C hostname | 壓縮SSH流量以提高慢速連接的性能?;蛘?,插入選項Compression yes到SSH配置文件中 |
ssh -o "Compression yes" -v hostname | 另一種壓縮SSH流量以提高慢速連接性能的方法。這與插入配置選項Compression yes到SSH配置文件中的方法相同。 |
ssh -X user@server | 通過SSH啟用X11轉(zhuǎn)發(fā): 以user用戶身份將圖形應(yīng)用程序從遠程server轉(zhuǎn)發(fā)到本地 |
ssh -o ForwardX11=yes user@server | 通過SSH啟用X11轉(zhuǎn)發(fā): 以user用戶身份將圖形應(yīng)用程序從遠程server轉(zhuǎn)發(fā)到本地 |
ssh -x | 禁用X11轉(zhuǎn)發(fā) |
ssh -Y | 啟用可信X11轉(zhuǎn)發(fā)。此選項比ssh -X將SSH 服務(wù)器的整個顯示轉(zhuǎn)發(fā)到客戶端的風(fēng)險更大 |
6.隧道技術(shù)
使用下面的SSH命令創(chuàng)建安全隧道:
選項 | 功能描述 | 語法/示例 |
-L | 將本地主機的某個端口轉(zhuǎn)發(fā)到遠程主機, 實現(xiàn)從本地主機到遠程主機的連接。本地主機充當(dāng)服務(wù)中繼, SSH將流量通過連接轉(zhuǎn)發(fā)到遠程主機上的指定端口 | 命令語法:# ssh user@ssh_server -L local_port:destination:remote_port 示例: # ssh root@192.168.0.1 -L 2222:10.0.1.5:3333 |
-J | 實現(xiàn)通過跳轉(zhuǎn)主機連接目標(biāo)主機。該參數(shù)是在連接到目標(biāo)主機之前,先通過跳板主機建立連接,然后再跳轉(zhuǎn)到目標(biāo)主機上 | 示例1:# ssh -J proxy_host1 remote_host 2 示例2:# ssh -J user@proxy_host1 user@remote_host2 示例3(多個堡壘主機跳轉(zhuǎn)): # ssh -J user@proxy_host1:port1,user@proxy_host2:port2 user@remote_host3 |
-R | 該參數(shù)實現(xiàn)反向端口轉(zhuǎn)發(fā), 它允許遠程主機將其某個端口轉(zhuǎn)發(fā)到本地主機, 實現(xiàn)從遠程主機到本地主機的連接。本地主機此時充當(dāng)服務(wù)中繼,遠程主機將流量通過SSH連接轉(zhuǎn)發(fā)到本地主機上的指定端口。其中: -N參數(shù)表示不執(zhí)行遠程命令, 對于專用端口轉(zhuǎn)發(fā)很有用。-f參數(shù)表示在后臺運行SSH | 語法: ssh -R [remote:]remote_port:destination:destination_port [user@]ssh_serve r 例子: # ssh -R 8080:192.168.3.8:3030 -N -f user@remote.host |
-D | 在本地主機上創(chuàng)建一個SOCK5代理服務(wù)器, 使得通過該代理的流量都經(jīng)過SSH連接到遠程主機。本地主機上的指定端口將作為SOCK5代理端口, 可以配置瀏覽器或其他應(yīng)用程序來使用該代理。流量將通過SSH連接到遠程主機, 然后由遠程主機發(fā)出 | 語法: # ssh -D local_port_number user@remote_host 例子: # ssh -D 6677 -q -C -N -f me@192.168.5.5 |
7.總結(jié)
上面總結(jié)了SSH、SCP、SFTP、SSH配置命令以及各種SSH隧道命令。以下是一些更高效、更安全的使用SSH的一些建議:
(1) 禁用X11和TCP轉(zhuǎn)發(fā), 攻擊者可以利用此類弱點訪問網(wǎng)絡(luò)上的其他系統(tǒng)。將sshd_config中的選項調(diào)整如下:
- 將AllowTcpForwarding設(shè)置為no。
- 將X11Forwarding設(shè)置為no。
(2) 更改sshd_config中的默認配置選項, 將默認端口22改成其它數(shù)字。
(3) 使用ssh-keygen創(chuàng)建SSH證書并對客戶端進行身份驗證。
(4) 利用隧道命令使用堡壘主機。
(5) 限制SSH登錄到特定的IP地址,例如通過在sshd_config中使用AllowUsers選項添加用戶過濾。