SSH 是 Linux 運維的生命線。本文匯總 Ubuntu 環境下 SSH 客戶端/服務端的高頻操作:密鑰登錄、多跳代理、SCP/Rsync 參數詳解、非 22 端口適配、SFTP 交互與服務端硬化配置。
| 場景 | 命令範例 | 關鍵參數 |
|---|---|---|
| 密碼登錄 | ssh user@192.168.1.100 | -p 指定端口 |
| 密鑰登錄 | ssh -i ~/.ssh/id_rsa user@host | -o IdentitiesOnly=yes |
| SCP 上傳 | scp -r local_dir user@host:/remote/path | -P 端口 (大寫), -r 遞歸 |
| SCP 下載 | scp -r user@host:/remote/path ./local | -p 保留時間戳/權限 |
| Rsync 同步上傳 | rsync -avz --delete -e "ssh -p 2222" local/ user@host:/remote/ | -a 歸檔, -z 壓縮, --delete 鏡像 |
| Rsync 下載 | rsync -avz -e "ssh -p 2222" user@host:/remote/ local/ | 同步遠程→本地 |
| SFTP 交互 | sftp -oPort=2222 user@host | 進入交互模式 put/get/ls/cd |
| 非標準端口 | ssh -p 2222 user@host / scp -P 2222 ... | 注意 ssh -p 小寫,scp -P 大寫 |
# 1. 安裝
sudo apt update && sudo apt install -y openssh-server
# 2. 啟用並驗證
sudo systemctl enable --now ssh
ss -ltnp | grep :22 # 應看到 LISTEN
# 3. 核心硬化配置 /etc/ssh/sshd_config
Port 2222 # 修改默認端口
PermitRootLogin no # 禁用 root 登錄
PubkeyAuthentication yes # 僅允許密鑰
PasswordAuthentication no # 禁用密碼
MaxAuthTries 3 # 限制嘗試次數
ClientAliveInterval 300 # 保活防斷連
AllowUsers deploy admin # 白名單用戶
# 4. 重載生效
sudo systemctl reload ssh
# 客戶端生成
ssh-keygen -t ed25519 -C "user@host"
# 複製公鑰到服務端
ssh-copy-id -p 2222 user@host
# 或手動追加 ~/.ssh/authorized_keys (權限 600)
# SSH 配置 ~/.ssh/config
Host bastion
HostName 10.0.0.1
User admin
Port 2222
Host target
HostName 192.168.10.5
User deploy
ProxyJump bastion
# 直連目標
ssh target
Permission denied:檢查 ~/.ssh (700)、authorized_keys (600)、家目錄 (755) 權限Connection refused:服務未啟動、防火牆攔截、端口不匹配Host key verification failed:ssh-keygen -R hostname 清除 known_hosts 舊記錄