每次用VSCode连接远程服务器都要输入密码,烦不烦?特别是当密码复杂度要求高(比如必须包含大小写字母+特殊字符+数字),每次连接都要盯着键盘小心翼翼输入,输错一次还得重来。作为常年需要连接几十台服务器的开发者,我深刻理解这种痛苦。
更糟的是,有些生产环境服务器出于安全考虑,会设置密码定期失效策略。这意味着你刚记住的密码,过段时间又得换新的。我曾经维护过一个金融系统,每15天强制更换一次密码,那段时间简直噩梦。
SSH密钥认证就是来解决这个痛点的。它用非对称加密技术替代传统密码验证,相当于给你的电脑配了把"数字钥匙"。配置成功后,VSCode连接服务器时自动完成身份验证,整个过程无需人工干预。实测下来,原本需要20秒的登录流程,现在瞬间完成,效率提升肉眼可见。
想象你有个带锁的邮箱(服务器),任何人都可以往里面投递信件(公钥加密),但只有你有钥匙能打开查看(私钥解密)。SSH密钥认证就是基于这个原理:
密钥对生成:使用ssh-keygen创建两个文件:
id_rsa(私钥)👉 相当于你家钥匙,必须严格保密id_rsa.pub(公钥)👉 相当于锁芯,可以放心交给服务器认证流程:
传统密码验证存在被暴力破解的风险,而密钥认证:
打开终端(Windows可用Git Bash),执行以下命令:
bash复制ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
关键参数说明:
-t rsa:指定RSA算法(也支持ed25519)-b 4096:密钥位数,越长越安全但性能开销越大-C:注释信息,通常用邮箱标识密钥用途你会看到如下交互提示:
bash复制Enter file in which to save the key (/home/you/.ssh/id_rsa): [按回车默认]
Enter passphrase (empty for no passphrase): [建议设置额外密码保护]
Enter same passphrase again:
成功后会生成两个文件:
~/.ssh/id_rsa 👉 绝不可泄露的私钥~/.ssh/id_rsa.pub 👉 需要上传到服务器的公钥如果服务器已开启密码登录,直接运行:
bash复制ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip
输入服务器密码后,公钥会自动追加到~/.ssh/authorized_keys文件。
bash复制cat ~/.ssh/id_rsa.pub
bash复制mkdir -p ~/.ssh
chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
bash复制chmod 600 ~/.ssh/authorized_keys
注意:权限设置不当会导致认证失败,常见错误有:
.ssh目录权限不是700authorized_keys权限不是600- 文件所有者不正确
安装Remote-SSH扩展(Microsoft官方出品)
按F1打开命令面板,输入"Remote-SSH: Open Configuration File"
选择C:\Users\yourname\.ssh\config(Windows)或~/.ssh/config(Mac/Linux)
添加服务器配置:
config复制Host myserver
HostName server_ip
User username
IdentityFile ~/.ssh/id_rsa
PreferredAuthentications publickey
保存后,在远程资源管理器即可看到"myserver"主机
典型错误:
code复制connect to host xxx port 22: Connection timed out
排查步骤:
bash复制sudo ufw allow 22/tcp
错误信息:
code复制Permission denied (publickey)
可能原因及解决:
bash复制chmod 600 ~/.ssh/id_rsa
/etc/ssh/sshd_config:config复制PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
修改后重启服务:bash复制sudo systemctl restart sshd
authorized_keys文件内容与本地公钥完全一致(注意换行符)C:\Users\username\.ssh\config)code复制Failed to connect to the remote extension host server
尝试删除服务器上的vscode缓存:
bash复制rm -rf ~/.vscode-server/
下次连接时会自动重新安装
当需要连接不同服务器时,建议为每个服务生成独立密钥:
bash复制ssh-keygen -t ed25519 -f ~/.ssh/id_work -C "work_projects"
然后在config文件中指定对应密钥:
config复制Host work-server
HostName 192.168.1.100
User dev
IdentityFile ~/.ssh/id_work
生成密钥时建议设置passphrase(密码短语):
bash复制ssh-keygen -t rsa -b 4096 -C "protected_key"
虽然每次使用需要输入密码,但可通过ssh-agent管理会话:
bash复制# 启动agent
eval $(ssh-agent -s)
# 添加密钥
ssh-add ~/.ssh/id_rsa
config复制PasswordAuthentication no
config复制AllowUsers dev_user deploy_user
config复制Port 2222
记得修改后测试现有连接是否正常,避免把自己锁在服务器外。