多用户通过 VS Code 远程 SSH 管理多台 Linux 服务器的最佳实践
一、文档目的
本文档提供清晰、高效、安全的指南,帮助技术团队使用 VSCode Remote-SSH 插件,实现多用户(不同客户端系统)免密远程连接到多台 Linux 服务器。涉及密钥生成、配置 SSH 客户端、服务器安全加固以及 ForwardAgent 的最佳使用。
二、架构示意图
客户端A (Windows/macOS)
├── SSH密钥
│ ├── 私钥(本地)
│ └── 公钥 → 开发环境服务器 authorized_keys
│
└── VSCode Remote-SSH
└── 配置(config)
├── Host srv-dev-ai-01 → 开发环境服务器
└── Host srv-prod-ai-01 → 生产环境服务器
客户端B (Windows/macOS)
└── 同上
开发环境服务器 (SRV-dev-ai-01)
生产环境服务器 (SRV-prod-ai-01)
三、使用场景
用户信息
mayun | may | Windows 11 |
mahuateng | maht | Windows 11 |
masike | mask | macOS |
目标服务器信息
SRV-dev-ai-01 | 172.19.1.113 | jack | Ubuntu 22.04 LTS |
SRV-prod-ai-01 | 172.21.2.115 | tony | Ubuntu 22.04 LTS |
四、SSH 免密登录基础
- 私钥:存储在客户端本地,严禁泄露。
- 公钥:存储在服务器的 ~/.ssh/authorized_keys 文件,用于认证客户端。
- 登录流程:客户端持私钥连接服务器,服务器比对公钥后,免密认证通过。
五、客户端密钥生成(Windows/macOS)
Windows 用户(PowerShell)
ssh-keygen –t rsa –b 4096 –C "may_dev-ai-01" –f $env:USERPROFILE\\.ssh\\id_rsa_may_dev-ai-01
ssh-keygen –t rsa –b 4096 –C "maht_prod-ai-01" –f $env:USERPROFILE\\.ssh\\id_rsa_maht_prod-ai-01
macOS 用户(Terminal)
ssh-keygen -t rsa -b 4096 -C "mask_dev-ai-01" -f ~/.ssh/id_rsa_mask_dev-ai-01
ssh-keygen -t rsa -b 4096 -C "mask_prod-ai-01" -f ~/.ssh/id_rsa_mask_prod-ai-01
- 注意:生成密钥时不设置密码(直接回车)。
六、设置密钥权限(安全必须)
Windows(PowerShell)
icacls $env:USERPROFILE\\.ssh\\id_rsa_* /inheritance:r
icacls $env:USERPROFILE\\.ssh\\id_rsa_* /grant:r "$env:USERNAME:r"
macOS(Terminal)
chmod 600 ~/.ssh/id_rsa_*
七、传输公钥到服务器(推荐)
Windows 用户
type $env:USERPROFILE\\.ssh\\id_rsa_may_dev-ai-01.pub | ssh jack@172.19.1.113 'mkdir -p ~/.ssh && tee -a ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys'
macOS 用户
cat ~/.ssh/id_rsa_mask_dev-ai-01.pub | ssh jack@172.19.1.113 'mkdir -p ~/.ssh && tee -a ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys'
首次需输入密码,确认服务器指纹。
八、配置 SSH 客户端(简化连接)
使用 tee 命令写入配置文件:
tee ~/.ssh/config <<EOF
Host srv-dev-ai-01
HostName 172.19.1.113
User jack
IdentityFile ~/.ssh/id_rsa_mask_dev-ai-01
Host srv-prod-ai-01
HostName 172.21.2.115
User tony
IdentityFile ~/.ssh/id_rsa_mask_prod-ai-01
ForwardAgent yes
EOF
- Windows: 与第六节权限设置相同
- macOS: chmod 600 ~/.ssh/config
九、服务器安全加固(必做)
服务器执行以下操作:
禁止密码登录
sudo nano /etc/ssh/sshd_config
# 修改
PasswordAuthentication no
PubkeyAuthentication yes
# 重启服务
sudo systemctl restart ssh
禁止Root登录
sudo nano /etc/ssh/sshd_config
# 修改
PermitRootLogin no
sudo systemctl restart ssh
防火墙设置
sudo ufw allow 22\\sudo ufw status
十、ForwardAgent 使用
- 定义:允许本地 SSH Agent 通过服务器跳转认证,无需在服务器存储私钥。
常见使用场景
- 跳板机访问内网服务器
- 从服务器访问 Git 仓库
启动 SSH Agent 并加载密钥(客户端)
eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa_mask_dev-ai-01
十一、VSCode Remote-SSH 配置
十二、常见问题排查
- Permission denied (publickey)
- 检查密钥路径和权限
- 检查服务器 authorized_keys 文件权限
- 仍需密码登录
- 检查 SSH 配置文件:确保PubkeyAuthentication yes 和 PasswordAuthentication no
附录:ForwardAgent 使用详细说明
定义
ForwardAgent yes 允许客户端 SSH Agent 将认证信息转发至远程服务器,避免将私钥复制到中转服务器,增强安全性。
原理与类比
- 私钥:身份证,本地保存。
- SSH Agent:智能手环,远程服务器可通过此手环进行认证,不需持有身份证本身。
使用场景
- 跳板机场景:客户端 → 跳板机 → 内网服务器
- Git 仓库访问:客户端 → 服务器 → Git 仓库
客户端启用 SSH Agent
eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa_mask_dev-ai-01
安全建议
- 仅在必要的跳转服务器启用 ForwardAgent
- 设置 SSH Agent 有效期,例如:ssh-add -t 3600 ~/.ssh/id_rsa_mask_dev-ai-01
评论前必须登录!
注册