ssh — 安全遠端登入與連線
透過加密通道安全地連線到遠端主機,執行指令或互動式操作。
語法
ssh [選項] [使用者@]主機 [指令]
常用選項
| 選項 | 說明 | 範例 |
|---|---|---|
-p 埠號 |
指定連接埠(預設 22) | ssh -p 2222 user@host |
-i 金鑰檔 |
指定 SSH 私鑰檔案 | ssh -i ~/.ssh/id_rsa user@host |
-L 本機:遠端 |
本機埠轉發(Local port forwarding) | ssh -L 8080:localhost:80 user@host |
-R 遠端:本機 |
遠端埠轉發(Remote port forwarding) | ssh -R 8080:localhost:80 user@host |
-N |
不執行遠端指令(純通道用途) | ssh -N -L 3306:db:3306 user@host |
-v / -vvv |
詳細/超詳細模式(診斷連線問題) | ssh -v user@host |
-X |
啟用 X11 轉發(遠端 GUI 程式) | ssh -X user@host |
-A |
啟用 SSH Agent 轉發 | ssh -A user@jumphost |
-o 選項=值 |
指定設定選項(覆蓋 ~/.ssh/config) | ssh -o StrictHostKeyChecking=no user@host |
使用範例
範例 1:基本連線(密碼驗證)
最基本的連線方式,指定使用者名稱與主機。系統會提示輸入密碼。
$ ssh user@192.168.1.100
user@192.168.1.100's password:
Welcome to Ubuntu 22.04.3 LTS
user@remote-host:~$
範例 2:使用金鑰驗證(免密碼)
指定私鑰檔案進行無密碼登入(需先用 ssh-copy-id 將公鑰複製到遠端)。
$ ssh -i ~/.ssh/id_ed25519 deploy@production.example.com
deploy@production:~$
範例 3:執行單一遠端指令
在連線後立即執行指定指令並回傳結果,不進入互動式 Shell。
$ ssh user@server "df -h && free -h"
Filesystem Size Used Avail Use%
/dev/sda1 50G 20G 28G 42%
total used free
Mem: 7.8G 3.2G 4.6G
範例 4:本機埠轉發(SSH Tunnel)
將本機 5432 port 轉發到遠端主機上的資料庫 5432,本機程式可直接連線。
$ ssh -N -L 5432:localhost:5432 user@server
(持續執行,按 Ctrl+C 中斷)
執行後,本機程式連線 localhost:5432 即等同連到遠端資料庫。
範例 5:設定 ~/.ssh/config 簡化連線
在設定檔中定義常用主機,之後只需輸入 ssh prod 即可連線。
$ # 在 ~/.ssh/config 中加入:\nHost prod\n HostName production.example.com\n User deploy\n Port 2222\n IdentityFile ~/.ssh/id_ed25519\n\n# 之後直接使用:\nssh prod
deploy@production:~$
常見錯誤與排錯
ssh: connect to host example.com port 22: Connection refused
- 原因
- SSH 服務(sshd)未啟動,或防火牆封鎖了 22 port。
- 解法
- 確認目標主機的 sshd 是否運行(systemctl status sshd),以及防火牆是否允許 SSH。
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- 原因
- 遠端主機的 SSH 公鑰與本機 ~/.ssh/known_hosts 記錄不符(可能是主機重建、IP 被重用)。
- 解法
- 若確認是合法主機,用 ssh-keygen -R hostname 移除舊記錄後重新連線。若不確定,警惕可能是中間人攻擊。
Permission denied (publickey)
- 原因
- 公鑰驗證失敗:私鑰不對應、公鑰未加入遠端 ~/.ssh/authorized_keys,或權限設定錯誤。
- 解法
- 確認: 1. 私鑰路徑正確(-i 選項) 2. 遠端 ~/.ssh/authorized_keys 含有對應公鑰 3. 遠端 ~/.ssh/ 為 700,authorized_keys 為 600 4. 加 -v 查看詳細診斷訊息