連線
ssh <user>@<host>在遠端主機上開啟一個互動式 SSH 工作階段。
-p PORT;-i identity_file;-l user(覆寫 user@);-E logfile 除錯;-v / -vv / -vvv 詳細度
ssh -p 2222 [email protected]ssh <user>@<host> '<cmd>'在遠端主機上執行單一非互動命令。
ssh ops@db1 'sudo systemctl status postgresql'ssh -J <jumphost>透過跳板機繞送 SSH 連線(ProxyJump)。
-J user1@jump1:2222,user2@jump2;-o ProxyCommand=ssh -W ...
ssh -J [email protected] db1.private -i ~/.ssh/db1_keyssh -N -L <l:r> -f <host>背景執行本地埠轉發,不開啟 shell;-L 本地:r遠端。
-N 不執行遠端命令;-f 背景;-L 8080:localhost:80;-g 允許遠端連回本地側
ssh -N -L 5432:localhost:5432 -f db1 && psql -h localhostssh -N -R <r:localhost:l>反向通道——在遠端開一個埠,把流量轉回本地埠。
-N;-f;-R 8080:localhost:3000;GatewayPorts yes(伺服器端設定)
ssh -N -R 8080:localhost:3000 [email protected]ssh -D <lport>透過 SSH 伺服器在本地建立 SOCKS 代理。
-C 壓縮;-q 安靜;-D 1080
ssh -D 1080 -q -N tunnel.example.com && curl --proxy socks5h://localhost:1080 https://ifconfig.messh -A <user>@<host>將本地的 ssh-agent 轉發到遠端主機(可在遠端再接力 SSH)。
-A 啟用 agent 轉發;-a 停用
ssh -A ops@bastion && ssh internal-db # 會沿用本機的金鑰ssh -o <key>=<value>臨時帶入 SSH 選項(適合一次性調整,不必寫進設定檔)。
StrictHostKeyChecking=no;UserKnownHostsFile=/dev/null(不安全,僅供測試);RequestTTY=force
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected]ssh -F <configfile>使用指定的 ssh_config 檔(適合按專案/客戶分開設定)。
-F 路徑;-G 解析後輸出設定而不實際連線
ssh -F ~/.ssh/config.work -G devbox | grep -E 'hostname|user'金鑰
ssh-keygen -t ed25519 -C '<email>'產生一組現代且精簡的 ED25519 金鑰對(建議優先選用,取代 RSA)。
-t ed25519|rsa|ecdsa;-b 位元數;-C 註解;-f 輸出路徑;-N 'passphrase';-q 安靜
ssh-keygen -t ed25519 -C 'you@work' -f ~/.ssh/work_ed25519 -N ''ssh-keygen -lf <pubkey>顯示公鑰的指紋與長度(稽核 SSH banner 時使用)。
-E md5|sha256|shake256;-l 列表;-i 從 stdin 讀取
ssh-keygen -lf ~/.ssh/id_ed25519.pub -E sha256ssh-keygen -R <host>從 known_hosts 移除某個主機金鑰(伺服器重灌/換金鑰後用)。
-R '[host]:port' 支援非預設埠
ssh-keygen -R '[bastion.example.com]:2222'ssh-copy-id <user>@<host>把公鑰安裝到遠端的 authorized_keys(需要密碼登入)。
-i identity.pub;-p PORT;-o 選項
ssh-copy-id -i ~/.ssh/work_ed25519.pub -p 2222 deploy@bastionssh-add [path]把私鑰加入執行中的 ssh-agent(之後不必再輸入 passphrase)。
-l 列出指紋;-D 刪除全部;-d path 移除指定;-t N 存活時間
eval $(ssh-agent) && ssh-add ~/.ssh/work_ed25519 && ssh-add -lssh-keyscan <host>輸出遠端主機的金鑰(用於預先植入 known_hosts/bootstrap)。
-t rsa|ed25519|ecdsa;-p PORT
ssh-keyscan -t ed25519 -p 2222 bastion.example.com >> ~/.ssh/known_hosts設定檔
~/.ssh/config使用者級 SSH 設定檔——宣告主機、別名、身份、跳板、keepalive。
Host 別名;HostName 實體;User;Port;IdentityFile;PreferredAuthentications;AddKeysToAgent yes;ServerAliveInterval 30;IdentitiesOnly yes;ProxyJump / ProxyCommand;LocalForward / RemoteForward;ControlMaster auto / ControlPath / ControlPersist
Host bastion
HostName bastion.example.com
Port 2222
User ops
IdentityFile ~/.ssh/work_ed25519
Host db*
ProxyJump bastion
User ubuntu檔案傳輸
scp <src> <dest>透過 SSH 在主機間複製檔案(舊式但隨處可見)。
-r 遞迴;-P PORT;-i 身份檔;-C 壓縮;-p 保留權限/時間;-l 限制頻寬(Kbit/s)
scp -P 2222 -r dist/ [email protected]:/srv/app/releases/1.4.2/rsync -avz -e ssh <src> <dest>差異同步的鏡像/複製——重複傳大樹時比 scp 快很多。
-a 歸檔;-v 詳細;-z 壓縮;-P 保留部分檔+進度;--delete 鏡像;--exclude;--dry-run;-e ssh -p 2222
rsync -avz -e 'ssh -p 2222' ./build/ ops@bastion:/srv/app/current/sshfs <user>@<host>:<path> <mount>透過 SSH 掛載遠端檔案系統(FUSE)——用本地工具直接編輯遠端檔案。
-p PORT;-o reconnect;-o transform_symlinks;-C 壓縮
sshfs ops@bastion:/srv/app ./remote -o reconnect,transform_symlinkssftp <user>@<host>透過 SSH 子系統做互動式/腳本化檔案傳輸。
sftp -i id -P port;指令:get / put / sync / ls / lls / cd / lcd / chmod
sftp ops@bastion <<'EOF'
mkdir /srv/app/releases/1.4.2
put -r dist/* /srv/app/releases/1.4.2/
EOF故障排除
ssh -vvv <host>追蹤連線過程:KEX、認證、通道建立。「為什麼連不上?」時首選。
-v / -vv / -vvv;-E file 寫入檔案
ssh -vvv -E /tmp/ssh.dbg ops@bastion 2>&1 | grep -E 'Authentications|method|Permission denied'ssh-keygen -y -f <private>從私鑰反推出對應的公鑰(手上只有私鑰時使用)。
-f 檔案;-E 雜湊演算法
ssh-keygen -y -f ~/.ssh/id_ed25519 > /tmp/derived.pub && diff ~/.ssh/id_ed25519.pub /tmp/derived.pub && echo OKssh -o ConnectTimeout=<N> -o ConnectionAttempts=<K>調整連線逾時/重試次數,適合網絡不穩或跳板機需熱身的場景。
ssh -o ConnectTimeout=5 -o ConnectionAttempts=2 ops@bastionssh -o ServerAliveInterval=30 -o ServerAliveCountMax=3讓閒置的 SSH 連線穿過 NAT/防火牆持續保活。
ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -L 5432:db:5432 -N ops@bastion跳板轉發
ssh -W %h:%p <proxy>作為 ProxyCommand 串接連線——ProxyJump 的傳統替代方案。
ProxyCommand ssh -W %h:%p myjumphost nc -q0 %h %p
ssh -o ProxyCommand='ssh -W %h:%p bastion.example.com' internal-db維護
ssh -O stop / ssh -M -S <sock>ControlMaster——多個終端機共用單一 SSH 工作階段,速度更快。
-M master 模式;-S socket 路徑;-O check|forward|exit
ssh -M -S ~/.ssh/cm-%h bastion; ssh -S ~/.ssh/cm-%h bastion -O check相關命令速查
商標與使用聲明
本批命令列工具速查手冊為開源社群參考資料。文中涉及的各工具的名稱、標識、商標(如 Git™、Docker™、Kubernetes®、kubectl、PostgreSQL®、MySQL®、Redis™、MongoDB®、Linux™、PowerShell™、Vim™ 等)均歸對應權利人所有,此處僅為識別與參考之目的使用。
本速查手冊的全部內容均為獨立編寫的簡化自包含參考,**與任何官方文件不存在隸屬、被認可或引用關係**。命令列表、參數說明、範例均為作者原創簡化表達;如需權威資訊,請參閱各工具的官方文件。
命令語法與參數可能在不同工具版本中有所差異。所示版本標籤對應穩定發佈版本;其他版本行為可能有所不同。本速查手冊**不代表**商標權利人的任何偏好或推薦。
如商標或版權方認為本站部分內容存在權益侵害,請發送電郵至[email protected],我們在收到有效權屬證明後,會在合理期限內修改或移除相關內容。
本網站不對因使用本站資訊而產生的任何直接或間接損失承擔法律責任。
關於 OpenSSH
OpenSSH 係事實標準嘅 SSH 實作,最初由 Tatu Ylönen 喺 1995 年以私有軟件形式發佈,1999 年由 Theo de Raadt 同 OpenBSD 團隊重寫為開源。當前可攜版係 OpenSSH 9.x,預裝喺每個 Linux 發行版、macOS(自 10.1 Panther 起),並透過 Windows 嘅選擇性 OpenSSH 用戶端/伺服器功能同 Win32-OpenSSH 移植版提供。OpenSSH 提供加密嘅遠端登入(`ssh`)、安全檔案傳輸(`scp`、`sftp`)、連接埠轉發(本地 `-L`、遠端 `-R`、動態 `-D` 當 SOCKS)、跳板主機(`-J`),以及將解密後嘅私鑰保留喺記憶體入面免卻重複輸入通行密語嘅代理(`ssh-agent`)。認證方式支援密碼、公鑰(Ed25519 係當下嘅推薦;RSA-3072+ 或者 ECDSA-P256 係可接受嘅退路)、FIDO2 硬件權杖(`sk-` 密鑰類型)、企業網絡嘅 Kerberos / GSSAPI。最被低估嘅功能係用戶設定檔 `~/.ssh/config`——主機資訊宣告一次,`ssh prod` 到處可用。私鑰當成密碼咁看待:加通行密語,永遠唔好拷到共用機,用 `ssh-keygen -t ed25519` 而唔係舊嘅 RSA / DSA。
速查頁版本 1.0.0