SSH 不只是「連上去」而已。真正好用的 SSH 會包含別名、金鑰、port forwarding、config 管理與安全習慣。這篇會把實戰裡最值得先學的技巧整理給你。
你如果不想每次都只是照著別人的畫面一步一步跟著按,卻不知道自己到底改了什麼,這篇會比較適合你。重點不是讓你背流程,而是讓你下次遇到類似情況時,還知道該怎麼自己判斷。
你會學到什麼
- 把 SSH 從單一指令升級成可長期使用的工具。
- 知道常見 SSH 選項在做什麼。
- 學會 port forwarding 和 SSH tunnel 的實際用途。
- 減少每次連線都要重新輸長指令的摩擦。
- 掌握 rsync 高效傳檔技巧。
什麼情況最適合先看這篇
- 第一次自己管理 Linux 主機,想把操作做穩而不是只會貼指令的人
- 你現在正要處理「Linux SSH 常用指令手冊」這類操作
- 你希望做完之後不只功能能用,連驗證與排錯也有概念
開始前先確認
- 先確認你已能正常 SSH 進主機。
- 如果你有多台主機,先整理命名方式。
- 準備好金鑰與本機
~/.ssh/config使用習慣。
先提醒你一件事
VPS 最怕的不是不會下指令,而是你不知道指令會影響到哪個服務、哪個設定檔、哪個對外連線。
詳細教學與操作步驟
本文為你整理了在 VPS 伺服器管理中最常用的 SSH 指令與技巧,無論是基礎連線、檔案傳輸還是安全性設定,都能在這份手冊中找到對應的指令。
一、 基礎連線指令
# 一般登入
ssh 使用者名稱@伺服器IP
# 指定連接埠登入
ssh -p 連接埠 使用者名稱@伺服器IP
# 登入後立即執行指令(不進入互動模式)
ssh root@伺服器IP "ls -l /tmp"
# 執行多個指令
ssh root@伺服器IP "uptime && df -h && free -h"
# 以 verbose 模式連線(排錯用)
ssh -vvv root@伺服器IP
二、 檔案傳輸 -- SCP
不需要開啟 FTP 服務,直接透過 SSH 通道安全地傳輸檔案:
# 上傳檔案
scp 本機路徑 遠端使用者@伺服器IP:遠端路徑
# 下載檔案
scp 遠端使用者@伺服器IP:遠端路徑 本機路徑
# 上傳整個目錄
scp -r ./my_folder root@伺服器IP:/home/root/
# 指定 port
scp -P 2222 file.txt root@伺服器IP:/tmp/
# 限制傳輸速度(單位 Kbit/s)
scp -l 10000 大檔案.tar.gz root@伺服器IP:/tmp/
三、 檔案傳輸 -- rsync(推薦)
rsync 比 SCP 更強大,支援增量傳輸(只傳有變動的部分),大量檔案時效率差非常多:
# 基本同步(本機 → 遠端)
rsync -avz ./local_folder/ root@伺服器IP:/remote_folder/
# 遠端 → 本機
rsync -avz root@伺服器IP:/remote_folder/ ./local_folder/
# 顯示傳輸進度
rsync -avz --progress ./data/ root@伺服器IP:/data/
# 刪除目標端多餘的檔案(保持完全同步)
rsync -avz --delete ./local/ root@伺服器IP:/remote/
# 排除特定檔案或目錄
rsync -avz --exclude='*.log' --exclude='node_modules/' \
./project/ root@伺服器IP:/var/www/project/
# 模擬執行(看看會做什麼,但不真的傳)
rsync -avzn ./local/ root@伺服器IP:/remote/
# 指定 SSH port
rsync -avz -e "ssh -p 2222" ./data/ root@伺服器IP:/data/
四、 SSH 金鑰 (Key) 管理
這是最安全的登入方式,強烈建議所有 侃瑞科技 VPS 用戶都應使用:
# 產生金鑰(推薦 ED25519)
ssh-keygen -t ed25519 -C "your@email.com"
# 如果需要兼容舊系統,用 RSA 4096
ssh-keygen -t rsa -b 4096 -C "your@email.com"
# 上傳金鑰到伺服器
ssh-copy-id root@伺服器IP
# 上傳到自訂 port 的伺服器
ssh-copy-id -p 2222 root@伺服器IP
# 查看金鑰指紋
ssh-keygen -l -f ~/.ssh/id_ed25519.pub
# 從 known_hosts 移除舊記錄
ssh-keygen -R 伺服器IP
管理多把金鑰:
# 為不同用途產生不同金鑰
ssh-keygen -t ed25519 -f ~/.ssh/kanrays_prod -C "prod-server"
ssh-keygen -t ed25519 -f ~/.ssh/kanrays_staging -C "staging-server"
在 SSH config 中指定對應的金鑰:
Host prod
HostName 123.45.67.89
User deploy
IdentityFile ~/.ssh/kanrays_prod
Host staging
HostName 98.76.54.32
User deploy
IdentityFile ~/.ssh/kanrays_staging
五、 SSH Config 進階設定
~/.ssh/config 的完整範例:
# 全域設定
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
AddKeysToAgent yes
IdentitiesOnly yes
# 正式站 — 透過跳板機連線
Host prod
HostName 10.0.0.5
User deploy
ProxyJump bastion
# 跳板機
Host bastion
HostName 公網IP
User admin
Port 2222
IdentityFile ~/.ssh/bastion_key
# 共用同一個連線(加速多次 SSH 操作)
Host fast-*
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600
建立 socket 目錄:
mkdir -p ~/.ssh/sockets
**ControlMaster 的效果:**第一次 SSH 連線後,後續的 SSH、SCP、rsync 都會重用同一個 TCP 連線,速度快很多。
六、 Port Forwarding(SSH 隧道)
這是 SSH 最強大但最容易被忽略的功能。
Local Port Forwarding -- 存取遠端的內部服務:
# 把遠端的 MySQL (3306) 映射到本機的 13306
ssh -L 13306:localhost:3306 root@伺服器IP
# 然後你就可以在本機用 MySQL 工具連線
mysql -h 127.0.0.1 -P 13306 -u root -p
# 把遠端的 phpMyAdmin 映射到本機
ssh -L 8888:localhost:80 root@伺服器IP
# 瀏覽器開 http://localhost:8888
Remote Port Forwarding -- 讓遠端存取你的本機服務:
# 把本機的 3000 port 暴露到遠端的 9000
ssh -R 9000:localhost:3000 root@伺服器IP
Dynamic Port Forwarding(SOCKS Proxy):
# 建立 SOCKS5 代理
ssh -D 1080 root@伺服器IP
# 瀏覽器設定 SOCKS proxy: localhost:1080
# 所有流量都會經過 VPS
背景執行隧道:
# -f 進入背景,-N 不執行遠端指令
ssh -fN -L 13306:localhost:3306 root@伺服器IP
# 查看背景隧道
ps aux | grep ssh
# 結束背景隧道
kill $(ps aux | grep "ssh -fN" | grep -v grep | awk '{print $2}')
七、 跳板機連線 (ProxyJump)
當你的 VPS 在內網,需要先連到跳板機:
# 命令列方式
ssh -J bastion_user@跳板IP 目標user@內網IP
# 更好的方式:寫在 config 裡(見上方 config 範例)
ssh prod
八、 安全性設定
為了防止攻擊,你可以修改 /etc/ssh/sshd_config 檔案:
# 關閉 Root 登入
PermitRootLogin no
# 關閉密碼登入(僅限金鑰)
PasswordAuthentication no
# 指定允許的使用者
AllowUsers deploy admin
# 限制登入嘗試次數
MaxAuthTries 3
# 關閉 X11 Forwarding(如果不需要)
X11Forwarding no
# 設定連線逾時
ClientAliveInterval 300
ClientAliveCountMax 2
修改後記得重啟 SSH:systemctl restart sshd
常見問題
Q:連線時顯示 Host key verification failed?
這代表伺服器的指紋與你電腦記錄的不符。如果伺服器剛重灌過,這是正常的。你可以手動刪除舊記錄:ssh-keygen -R 伺服器IP。更多疑難排解可參考我們的 SSH 連線詳細教學。
Q:如何保持 SSH 連線不中斷?
在 ~/.ssh/config 加入 ServerAliveInterval 60,讓系統每分鐘自動發送一個信號保持連線活躍。或者使用 tmux,即使 SSH 斷線,你的工作也不會中斷。
Q:SCP 和 rsync 該用哪個? 小量檔案用 SCP 方便,大量檔案或需要增量同步用 rsync。rsync 可以中斷後續傳、排除特定檔案,功能強大許多。正式部署建議統一用 rsync。
Q:SSH 連線很慢怎麼辦?
# 關閉 DNS 反查(最常見的原因)
# 在 /etc/ssh/sshd_config 加入
UseDNS no
# 使用壓縮(低頻寬環境有幫助)
ssh -C root@伺服器IP
# 使用 ControlMaster 加速重複連線
做完後怎麼確認自己真的有設對
- 確認 SSH config 中的每台主機都能正常連線。
- 用
ssh -vvvverbose 模式確認使用的是預期的金鑰。 - 測試 SCP 或 rsync 檔案傳輸正常。
- 如果設了 port forwarding,確認本機可以存取遠端服務。
這一題最常踩的坑
- 所有主機都共用同一把金鑰,管理很容易失控。
- 沒用 config 管理時,時間一久很難維護。
- 不理解 port forwarding 的作用就亂開,可能增加風險。
- rsync 的
--delete用錯方向,把目標端的檔案刪光。 - 金鑰檔案權限太寬鬆(應該是 600),SSH 會拒絕使用。
如果你要往下一步走
如果你需要背景長時間工作流程,下一篇很適合接 tmux 教學。想了解更多系統管理技巧,看 Linux 系統維護常用指令大全。如果你準備開始自己架服務,可以直接對照侃瑞的 VPS 方案與價格 選環境。