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 查看詳細診斷訊息

延伸閱讀