技術文章 · IT 指令工具箱

SSH 指令與 config:金鑰、跳板機、Port Forward 與除錯

整理 ssh 登入、指定金鑰與連接埠、SSH config、ProxyJump、本機/遠端轉送、SOCKS、keepalive、host key 與 verbose 除錯。

作者 Steve Chen · 發布  · 約 6 分鐘閱讀

IT 指令工具箱 — 廷皓技術專欄插圖

SSH 不只拿來登入,也常用於跳板、檔案傳輸與暫時性通道。先把主機別名、使用者、金鑰與 host key 管好,比每次複製一長串參數可靠。

22 組範例OpenSSHLinuxmacOSWindows OpenSSH查核日期:2026-08-11
動手前:私鑰不能貼進工單或版本庫。第一次連線要用其他可信管道核對 host key fingerprint;轉送連接埠可能繞過原本網路邊界,需取得授權並限制 bind address。

登入與連線參數

登入遠端主機OpenSSH

使用預設 TCP 22 與可用認證方式。

指定 SSH 連接埠OpenSSH

ssh -p 2222 [email protected]

ssh 使用小寫 -p;scp 的 port 參數是大寫 -P。

指定私鑰OpenSSH

ssh -i ~/.ssh/id_ed25519 [email protected]

私鑰權限通常應限制為只有本人可讀。

只執行遠端命令OpenSSH

ssh [email protected] 'uname -a'

引號決定由本機還是遠端 shell 展開。

詳細除錯OpenSSH

ssh -vvv [email protected]

可能顯示內網名稱與認證流程,分享前遮蔽。

測試認證但不開 shellOpenSSH

ssh -T [email protected]

遠端服務需支援此用法;不代表所有 SSH server 都一樣。

指定連線逾時OpenSSH

ssh -o ConnectTimeout=8 [email protected]

只限制建立連線的等待。

避免閒置連線被中間設備切掉OpenSSH

ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=3 [email protected]

這是 client 端 keepalive,不是 server TCP keepalive。

SSH config 與跳板

查看套用後的 SSH 設定OpenSSH

ssh -G production | less

可確認 Host、User、IdentityFile 與 ProxyJump 最終值。

使用主機別名~/.ssh/config

Host production
  HostName 203.0.113.10
  User deploy
  IdentityFile ~/.ssh/id_ed25519

把內容放進 ~/.ssh/config,之後可用 ssh production。

在 config 設 ProxyJump~/.ssh/config

Host internal-app
  HostName 10.20.0.15
  User appuser
  ProxyJump [email protected]

集中管理可避免操作時漏參數。

只允許指定 IdentityOpenSSH

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 [email protected]

避免 agent 提供太多金鑰導致認證失敗。

列出 agent 已載入金鑰OpenSSH agent

ssh-add -l

只顯示 fingerprint,不應顯示私鑰內容。

載入金鑰到 agentOpenSSH agent

ssh-add ~/.ssh/id_ed25519

共享電腦與長期 agent 要留意金鑰可用時間。

Port Forward/Tunnel

本機轉送到遠端資料庫OpenSSH

ssh -N -L 127.0.0.1:15432:db.internal:5432 [email protected]

本機只綁 loopback;連線 localhost:15432 即轉到遠端 DB。

本機轉送遠端 WebOpenSSH

ssh -N -L 127.0.0.1:18080:127.0.0.1:8080 [email protected]

讓遠端 localhost 服務只暫時從本機存取。

背景建立轉送OpenSSH

ssh -fN -o ExitOnForwardFailure=yes -L 127.0.0.1:15432:db.internal:5432 [email protected]

-f 進背景前先確認 forward 成功;要記錄如何停止。

建立 SOCKS5 proxyOpenSSH

ssh -N -D 127.0.0.1:1080 [email protected]

應只綁 loopback,並在應用程式設定 SOCKS5。

遠端轉送到本機服務OpenSSH

ssh -N -R 127.0.0.1:18080:127.0.0.1:8080 [email protected]

是否允許與 bind 範圍受 server GatewayPorts 等設定影響。

檢查遠端 host keyOpenSSH

ssh-keyscan -t ed25519 server.example.com

keyscan 不會證明真實身分,輸出 fingerprint 後仍需用可信管道核對。

看本機 known_hosts 對應項目OpenSSH

ssh-keygen -F server.example.com

只查詢,不刪除。

怎麼確認有做對

  • ssh -G 檢查最終 client 設定。
  • 第一次連線用另一管道核對 fingerprint。
  • 轉送建立後用 ss、lsof 或 Test-NetConnection 確認只綁預期介面。

常見錯誤

  • 看到 host key changed 就直接刪 known_hosts。
  • 私鑰權限過寬或被放進版本庫。
  • Port Forward 綁 0.0.0.0,意外對整個網段開放。
  • 把 ProxyJump、ProxyCommand 與 shell 引號混寫。

版本與官方文件

參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。

聯絡廷皓討論 看更多文章