共计 2203 个字符,预计需要花费 6 分钟才能阅读完成。
背景介绍
SSH(Secure Shell)是开发者日常工作中不可或缺的工具,它为我们提供了一种安全的方式来远程登录服务器、传输文件或执行命令。特别是在使用 Claude Code 这样的开发环境时,通过 SSH 连接远程服务器可以让你在本地获得与服务器相同的开发体验,而不用担心环境差异带来的问题。

SSH 的核心优势在于其加密通信机制,这意味着即使在不安全的网络环境下,你的数据和凭证也不会被窃取。对于开发者来说,这意味着可以安全地在咖啡厅、机场等公共场所工作,而不必担心敏感信息泄露。
前置准备
在开始配置之前,请确保你已经准备好以下内容:
- 一台运行 macOS、Linux 或 Windows(需安装 WSL 或 Git Bash)的本地计算机
- Claude Code 编辑器已安装并配置
- 目标远程服务器的 IP 地址或域名
- 远程服务器的管理员权限(用于初始配置)
- 稳定的网络连接
详细配置步骤
1. 生成 SSH 密钥对
密钥认证是 SSH 最安全的方式,避免了密码认证的风险。我们将首先生成一对密钥:
- 打开终端(macOS/Linux)或 Git Bash(Windows)
- 运行以下命令生成密钥:
ssh-keygen -t ed25519 -C "your_email@example.com"
- 系统会提示你选择保存位置(默认按回车即可)
- 设置一个安全的密码(建议使用密码管理器生成)
- 密钥生成后,会在 ~/.ssh/ 目录下创建两个文件:
- id_ed25519(私钥,必须严格保密)
- id_ed25519.pub(公钥,可以安全共享)
2. 配置 SSH 配置文件
为了让 SSH 连接更高效,我们可以创建配置文件来管理多个服务器连接:
- 在 ~/.ssh/ 目录下创建或编辑 config 文件
- 添加以下配置模板:
Host myserver
HostName server.example.com
User username
IdentityFile ~/.ssh/id_ed25519
Port 22
- 保存文件并设置正确的权限:
chmod 600 ~/.ssh/config
3. 设置远程服务器认证
现在我们需要将公钥上传到远程服务器:
- 使用密码方式登录远程服务器
- 确保 ~/.ssh 目录存在:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
- 将本地公钥添加到服务器的授权密钥中:
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
4. 测试连接
完成以上步骤后,可以测试连接是否正常工作:
ssh myserver
如果一切配置正确,你应该可以直接登录服务器而无需输入密码(如果设置了密钥密码,需要输入)。
代码示例
以下是完整的配置示例,包含详细注释:
# 生成 SSH 密钥(Ed25519 算法目前最安全)ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519_myserver
# 查看并复制公钥内容(用于添加到服务器)cat ~/.ssh/id_ed25519_myserver.pub
# 配置本地 SSH config 文件
cat >> ~/.ssh/config <<EOF
Host myserver
HostName 192.168.1.100 # 服务器 IP 或域名
User devuser # 登录用户名
IdentityFile ~/.ssh/id_ed25519_myserver # 指定私钥路径
Port 2222 # 自定义 SSH 端口(如果修改过默认 22)ServerAliveInterval 60 # 保持连接活跃
EOF
# 设置文件权限(安全必须)chmod 600 ~/.ssh/config
# 测试连接
ssh -T myserver
安全最佳实践
密钥管理
- 私钥等同于密码,永远不要共享或上传到任何地方
- 建议为不同的服务器使用不同的密钥对
- 定期轮换密钥(每 6 -12 个月)
- 使用密码保护你的私钥
防火墙设置
- 修改默认 SSH 端口(22)可以减少自动化攻击
- 使用防火墙限制可连接 SSH 的 IP 范围
- 考虑使用 fail2ban 来阻止暴力破解尝试
登录限制
- 禁用 root 用户的直接 SSH 登录
- 禁用密码认证,仅允许密钥登录
- 限制可登录的用户列表
常见问题排查
1. 连接超时
- 检查服务器 IP 和端口是否正确
- 确认防火墙允许 SSH 连接
- 测试网络连通性(ping/telnet)
2. 权限被拒绝(publickey)
- 确认公钥已正确添加到服务器的 authorized_keys
- 检查文件和目录权限(.ssh 应为 700,authorized_keys 应为 600)
- 验证密钥对的匹配性
3. 服务器拒绝连接
- 检查 SSH 服务是否正在运行
- 查看服务器日志 /var/log/auth.log
- 确认 SELinux 或 AppArmor 没有阻止连接
进阶建议
优化 SSH 连接性能
- 启用压缩:在配置中添加
Compression yes - 使用更快的加密算法:
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com - 保持连接:
ControlMaster auto+ControlPath配置 - 对于高延迟网络,调整 TCP 参数
结尾思考
我们已经完成了基本的 SSH 配置,但实际工作中常常需要在多台服务器之间跳转。思考一下:如何实现多服务器间的免密跳转?这涉及到 SSH 代理转发和密钥管理的进阶技巧,我们将在下一篇文章中详细探讨。
希望这篇指南能帮助你顺利搭建安全的开发环境。如果遇到任何问题,欢迎在评论区留言讨论。
正文完
