SSH 远程管理
ssh;密钥与跳板。
30 分钟
SSH:DevOps 远程管理核心
SSH(Secure Shell)是运维登录 Linux 服务器、执行命令、传输文件的标准方式。本课在 linux-essentials 的 linux-ssh 基础上,补充 密钥管理、隧道转发、SSH 配置最佳实践;网络基础见 networking-essentials,配置版本化见 git-essentials,服务器域名解析见 dns-essentials。
学习目标
- 配置 密钥登录 并禁用密码登录(生产环境)
- 使用 SSH 隧道 访问仅监听 127.0.0.1 的服务
- 编写
~/.ssh/config简化多服务器管理
SSH 基础连接
# 生成 ED25519 密钥(推荐)
ssh-keygen -t ed25519 -C "devops@example.com" -f ~/.ssh/id_ed25519
# 复制公钥到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server.example.com
# 登录
ssh user@server.example.com
端口 22/TCP,应用层协议,传输层 TCP,会话加密在 SSH 协议内部完成(类似 OSI L5-L7 合一)。
服务器端加固
编辑 /etc/ssh/sshd_config:
Port 22
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers deploy ops
# 修改前务必保留一个已登录会话,防止锁死
sudo sshd -t # 语法检查
sudo systemctl reload sshd
与 sec-server 一致:禁止 0.0.0.0/0 弱口令 SSH 是服务器安全底线。
SSH 隧道:访问内网服务
CodeRoadMap 的 MySQL :3306 和 backend :8080 通常 仅绑定 127.0.0.1,管理员通过 SSH 隧道访问:
# 本地转发:本机 18080 → 服务器 127.0.0.1:8080
ssh -L 18080:127.0.0.1:8080 user@server.example.com
# 另一个终端
curl http://127.0.0.1:18080/actuator/health
# 本地转发 MySQL
ssh -L 13306:127.0.0.1:3306 user@server.example.com
mysql -h 127.0.0.1 -P 13306 -u app -p
详见 net-vpn 的 SSH 隧道章节。
~/.ssh/config 多主机管理
Host prod
HostName server.example.com
User deploy
IdentityFile ~/.ssh/id_ed25519
LocalForward 18080 127.0.0.1:8080
Host staging
HostName staging.example.com
User deploy
IdentityFile ~/.ssh/id_ed25519_staging