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