ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

Windows与Ubuntu服务器SSH密钥免密登录配置指南

Windows与Ubuntu服务器SSH密钥免密登录配置指南 1. 为什么需要SSH密钥免密登录每次连接远程服务器都要输入密码既麻烦又不安全。我在管理十几台Ubuntu服务器时深有体会——频繁输入密码不仅效率低下还容易因密码复杂度要求而输错。更严重的是密码登录可能遭受暴力破解攻击。SSH密钥认证完美解决了这些问题。它采用非对称加密技术本地生成密钥对公钥私钥将公钥部署到服务器后客户端用私钥自动完成认证。根据OpenSSH官方文档密钥认证的安全性远高于密码认证且支持完全自动化登录。2. 准备工作与环境确认2.1 系统环境要求Windows端Windows 10/11需启用OpenSSH客户端或安装Git for Windows自带SSH工具推荐使用Windows Terminal获得更好体验Ubuntu Server端已安装openssh-server默认包含在标准安装中确认sshd服务运行状态sudo systemctl status sshd2.2 网络连通性检查先测试基础连接是否正常# Windows PowerShell执行 Test-NetConnection 服务器IP -Port 22若显示TcpTestSucceeded : True则连通性正常。若失败需检查服务器防火墙规则sudo ufw allow 22云服务器的安全组配置本地网络是否限制22端口3. Windows端密钥生成与管理3.1 生成ED25519密钥对在PowerShell中执行ssh-keygen -t ed25519 -C your_emailexample.com参数说明-t ed25519使用更安全的ED25519算法比RSA更推荐-C添加注释通常用邮箱标识生成过程中会提示保存路径默认C:\Users\用户名\.ssh\id_ed25519设置密钥密码可选但推荐增加安全性重要安全提示私钥文件id_ed25519相当于数字身份证绝不能泄露建议设置强密码保护不要上传到云端或共享定期轮换密钥建议每6个月3.2 密钥文件权限设置Windows的OpenSSH对密钥文件权限敏感需执行icacls.exe $env:USERPROFILE\.ssh\id_ed25519 /inheritance:r /grant:r $env:USERNAME:(R) icacls.exe $env:USERPROFILE\.ssh\id_ed25519.pub /inheritance:r /grant:r $env:USERNAME:(R)这确保只有当前用户可读取密钥文件。4. 部署公钥到Ubuntu Server4.1 手动复制公钥内容查看并复制公钥cat ~/.ssh/id_ed25519.pub | clip这会直接将公钥内容复制到剪贴板。4.2 服务器端配置登录Ubuntu Server后mkdir -p ~/.ssh chmod 700 ~/.ssh echo 粘贴公钥内容 ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys关键权限说明.ssh目录必须为700drwx------authorized_keys必须为600-rw------- 权限错误会导致SSH拒绝密钥认证4.3 自动化部署方案推荐更高效的方式是使用ssh-copy-id# 如果使用Git Bash ssh-copy-id -i ~/.ssh/id_ed25519.pub usernameserver_ip若提示命令不存在可手动实现相同功能type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh usernameserver_ip mkdir -p ~/.ssh cat ~/.ssh/authorized_keys5. 连接测试与问题排查5.1 基础连接测试ssh -v usernameserver_ip添加-v参数显示详细调试信息首次连接会提示确认主机指纹。5.2 常见问题解决问题1仍提示输入密码检查项服务器/etc/ssh/sshd_config配置PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys文件权限重点检查.ssh和authorized_keysSELinux状态如有需要执行restorecon -Rv ~/.ssh问题2Permission denied (publickey)可能原因客户端未指定正确私钥服务器未读取到公钥解决方案ssh -i ~/.ssh/id_ed25519 usernameserver_ip问题3Host key verification failed解决方法# 清除旧指纹 ssh-keygen -R server_ip6. 高级配置与优化6.1 客户端配置文件简化在~/.ssh/config中添加没有则新建Host myserver HostName server_ip User username IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes之后只需执行ssh myserver即可连接。6.2 禁用密码登录提升安全性确认密钥登录正常后在服务器端sudo sed -i s/#PasswordAuthentication yes/PasswordAuthentication no/ /etc/ssh/sshd_config sudo systemctl restart sshd6.3 多密钥管理技巧当需要管理多组密钥时为不同服务器生成不同密钥在config文件中指定Host serverA IdentityFile ~/.ssh/id_serverA Host serverB IdentityFile ~/.ssh/id_serverB7. 安全最佳实践私钥保护使用密码加密私钥考虑使用硬件安全模块HSM或Windows证书存储服务器加固# 修改默认端口 sudo sed -i s/#Port 22/Port 2222/ /etc/ssh/sshd_config # 限制root登录 sudo sed -i s/#PermitRootLogin prohibit-password/PermitRootLogin no/ /etc/ssh/sshd_config监控与审计# 查看登录记录 sudo cat /var/log/auth.log | grep sshd定期轮换密钥每3-6个月生成新密钥从服务器删除不再使用的公钥8. 生产力工具集成8.1 VS Code远程开发安装Remote - SSH扩展按F1选择Remote-SSH: Connect to Host选择配置好的主机名遇到setting up ssh host卡顿时可尝试在设置中关闭Remote.SSH: Use Local Server使用更稳定的网络连接8.2 PowerShell脚本自动化创建连接脚本connect.ps1param( [string]$Server myserver ) $ErrorActionPreference Stop try { ssh $Server } catch { Write-Host 连接失败: $_ -ForegroundColor Red exit 1 }9. 密钥备份与迁移9.1 安全备份方案加密打包密钥Compress-Archive -Path ~\.ssh -DestinationPath ssh_backup.zip -EncryptionKey (ConvertTo-SecureString -String YourStrongPassword -AsPlainText -Force)将备份文件存储在加密USB或密码管理器中9.2 跨设备迁移步骤在新设备生成新密钥对将新公钥添加到服务器确认新密钥可登录后再移除旧公钥这种方法比直接复制私钥更安全避免了密钥泄露风险。10. 替代方案对比10.1 其他SSH客户端选项工具优点缺点OpenSSH (内置)原生支持无需安装功能较基础Git for Windows包含完整SSH工具链需要额外安装GitPuTTY图形界面友好使用.ppk格式密钥Windows Terminal现代化界面多标签支持只是终端外壳10.2 不同密钥算法比较算法安全性密钥长度兼容性RSA高≥2048位最好ECDSA很高256位较好ED25519最高256位较新系统支持实测建议优先使用ED25519遇到兼容问题再考虑RSA。
返回列表