
先搞懂:为什么免密连接比输密码更好?
在说具体操作前,咱们得先明白一个问题:免密连接到底好在哪儿?你可能会想“输密码虽然麻烦,但至少看得见摸得着,免密会不会不安全?”其实恰恰相反,SSH密钥认证比密码认证安全得多,而且效率提升不是一点半点。
我去年帮公司带实习生的时候,就遇到过典型案例:新来的小伙儿坚持用密码连接服务器,理由是“看得见的密码才放心”。结果呢?一周内因为赶项目着急,输错密码三次,导致服务器临时锁定(很多服务器有输错次数限制),每次都得找运维解锁,不仅耽误自己进度,还影响整个团队。后来我帮他配置了免密连接,他自己都说“原来连服务器可以这么丝滑,早知道就不跟密码死磕了”。
从原理到实际:免密连接到底是怎么回事?
免密连接的核心是「密钥配对」,就像你家的钥匙和锁:公钥是“锁”,你把它放在服务器上;私钥是“钥匙”,存在你自己的电脑里。每次连接时,服务器会用公钥“验证”你电脑里的私钥,配对成功就直接放行,全程不用输密码。
对比输密码的方式,它有三个明显优势:
哪些人特别适合用免密连接?
其实只要用VSCode做远程开发的人都该试试,但这几类人尤其需要:
我之前在的创业团队,10个开发全都用密码连接服务器,光是每周因为输错密码、忘记密码浪费的时间加起来就有20多小时,后来统一配置免密连接后,这部分时间几乎降为零,团队leader还在周会上专门夸了这个方法“立竿见影”。
手把手实操:从密钥生成到VSCode配置,一步不落
接下来进入最关键的实操环节,别担心,我会把每个步骤拆解得像“教老人用微信”一样细,不管你是Windows、Mac还是Linux系统,跟着做都能搞定。
第一步:在自己电脑上生成SSH密钥(3分钟搞定)
密钥是免密连接的“通行证”,得先在你本地电脑生成一对(公钥+私钥)。不同系统的操作稍有区别,但核心命令一样,我整理了一张对比表,你对着找自己的系统操作就行:
操作步骤 | Windows系统(PowerShell) | Mac/Linux系统(终端) | 注意事项 |
---|---|---|---|
|
按Win+R,输入powershell,回车 | 启动台搜索“终端”或按Cmd+空格输入terminal | 确保终端有管理员权限(右键“以管理员身份运行”) |
|
输入: ssh-keygen -t ed25519 |
输入: ssh-keygen -t ed25519 |
-t ed25519是指定密钥算法,比rsa更安全(VSCode推荐) |
|
默认路径: C:Users你的用户名.sshid_ed25519 直接回车用默认 |
默认路径: ~/.ssh/id_ed25519 直接回车用默认 |
如果之前生成过密钥,会提示是否覆盖,选n(新建其他文件名) |
|
直接按两次回车(留空) | 直接按两次回车(留空) | 留空就是完全免密,设密码则需要“密钥+密码”双重验证(更安全但麻烦) |
小提醒
:如果你之前从没接触过终端命令,可能会卡在“找不到.ssh文件夹”。别慌,这是正常的,密钥生成后会自动创建这个文件夹,你可以在文件管理器里输入路径找到它(Windows是C:Users你的用户名.ssh
,Mac/Linux是~/.ssh
),里面会有两个文件:id_ed25519
(私钥,像你的家门钥匙,千万别给别人)和id_ed25519.pub
(公钥,像锁,可以放心给服务器)。
第二步:把公钥“装”到服务器上(2分钟搞定)
生成密钥后,得把公钥放到服务器上,这样服务器才认识你的“钥匙”。这一步有两种方法,选你觉得方便的就行。
方法一:用ssh-copy-id命令(推荐,适合服务器支持该命令的情况)
在本地终端输入:
ssh-copy-id -i ~/.ssh/id_ed25519.pub 服务器用户名@服务器IP
比如你的服务器用户名是dev
,IP是192.168.1.100
,就输入:
ssh-copy-id -i ~/.ssh/id_ed25519.pub dev@192.168.1.100
然后会提示你输入服务器密码(这是最后一次输密码!),输完回车,看到“Number of key(s) added: 1”就说明成功了。
方法二:手动复制公钥内容(适合服务器不支持ssh-copy-id的情况)
如果服务器提示“command not found: ssh-copy-id”,别慌,手动复制也很简单:
id_ed25519.pub
),全选复制内容(以“ssh-ed25519”开头的一长串字符); mkdir -p ~/.ssh && chmod 700 ~/.ssh
(创建.ssh文件夹并设置权限,这步很重要,权限不对会导致密钥无效); vi ~/.ssh/authorized_keys
打开授权文件,按i
进入编辑模式,把复制的公钥内容粘贴进去,按Esc
,输入:wq
保存退出; chmod 600 ~/.ssh/authorized_keys
(设置文件权限,必须是600,否则服务器不认)。 我踩过的坑
:有次帮朋友配置时,他服务器的~/.ssh
文件夹权限是777(所有人可读写),结果公钥怎么都不生效,后来改成700(只有自己能访问),立刻就好了。所以权限这步千万别偷懒,按上面的命令设置准没错。
第三步:VSCode里配置Remote-SSH,实现“一点就连”(5分钟搞定)
服务器配置好公钥后,最后一步就是在VSCode里设置,以后就能一键连接了。
先安装Remote-SSH插件
打开VSCode,左边栏点“扩展”(或按Ctrl+Shift+X
),搜索“Remote
配置服务器连接信息
C:Users你的用户名.sshconfig
或~/.ssh/config
); Host 服务器昵称(随便起,比如MyServer)
HostName 服务器IP或域名(比如192.168.1.100)
User 服务器用户名(比如dev)
IdentityFile 本地私钥路径(比如C:Users你的用户名.sshid_ed25519或~/.ssh/id_ed25519)
举个例子,我的配置是:
Host MyDevServer
HostName 10.0.0.5
User webdev
IdentityFile C:Userszhangsan.sshid_ed25519
小技巧
:如果你有多个服务器,就按上面的格式多写几行Host
配置,每个服务器一个昵称,这样在VSCode里就能一目了然,想连哪个点哪个。
验证是否真的免密成功
断开连接(点击VSCode状态栏的服务器昵称,选“关闭远程连接”),再重新连接,如果全程没让你输密码,直接进入服务器目录,就说明大功告成!如果还是提示输密码,别急,检查这三个地方:
,Mac/Linux用斜杠/
); authorized_keys
文件里有没有你的公钥,且权限是600; chmod 600 ~/.ssh/id_ed25519
)。 我之前帮同事排查时,就遇到过“私钥路径写成相对路径”的问题,他写成./.ssh/id_ed25519
,VSCode根本找不到,改成绝对路径后立刻就好了。
按照上面的步骤做完,你现在应该已经能用VSCode免密连接服务器了吧?如果成功了,记得试试在服务器上新建个文件,保存时会不会自动同步——免密连接不仅让登录更快,VSCode的文件同步、终端操作也会更流畅。如果遇到问题,别着急,把错误提示截图发在评论区,我看到都会帮你分析分析。毕竟远程开发嘛,环境配置的坑踩多了,自然就有经验了~
服务器IP变了啊?别慌,免密配置照样能用,根本不用重新搞一遍密钥那些麻烦事。我上个月刚帮隔壁部门的同事处理过这情况,他当时服务器迁移换了IP,急得不行,以为之前配的免密全白费了,结果我两分钟就给他搞定了。其实道理很简单,免密连接的核心是你本地的私钥和服务器上的公钥配对,这俩就像你和服务器之间的“暗号”,IP呢,顶多算个“见面地点”,地点变了,暗号没变,服务器照样认你。
具体改起来也特简单,你打开VSCode,左边栏找到那个像插头一样的“远程资源管理器”图标点进去,然后看“SSH目标”那块儿,旁边是不是有个小齿轮图标?点一下那个齿轮,选你之前配置的SSH文件(一般就是第一个带.ssh/config的)。打开文件后,找到你给服务器起的昵称对应的Host块,比如你之前写的Host MyServer,下面肯定有一行HostName,后面跟着的就是旧IP,你把那个IP换成新的,保存一下文件。完事儿了,回到远程资源管理器,右键点你那个服务器昵称,选“连接到主机”,你看,是不是直接就连上了?对了,有个小细节得提醒你,改完一定要记得保存文件,我之前有次帮人改,光顾着改IP忘了按Ctrl+S,结果连半天没反应,还以为哪里出问题了,后来才发现是没保存,白折腾好几分钟,你可别犯我这糊涂账。
配置完免密连接后,为什么VSCode连接时仍然提示输入密码?
这种情况最常见的原因有三个:一是本地私钥路径配置错误,比如VSCode的SSH配置文件(config)中IdentityFile路径写错,需检查路径是否为绝对路径(如Windows的“C:Users用户名.sshid_ed25519”或Mac/Linux的“~/.ssh/id_ed25519”);二是服务器权限问题,需确保服务器的~/.ssh文件夹权限为700,authorized_keys文件权限为600(可通过“chmod 700 ~/.ssh”和“chmod 600 ~/.ssh/authorized_keys”修复);三是公钥未正确添加到服务器的authorized_keys文件,可重新检查文件中是否包含本地公钥的完整内容。
Windows系统找不到.ssh文件夹怎么办?
.ssh文件夹默认隐藏在用户目录下,路径为“C:Users你的用户名.ssh”。如果在文件管理器中看不到,可点击顶部“查看”,勾选“隐藏的项目”显示隐藏文件;若仍找不到,可能是还未生成密钥,按文章步骤生成密钥后会自动创建该文件夹;也可手动创建:在用户目录右键“新建文件夹”,命名为“.ssh”(注意前面有个点),但 优先通过生成密钥自动创建,避免权限问题。
私钥文件泄露了会有什么风险?如何处理?
私钥相当于服务器的“钥匙”,泄露后他人可能通过你的私钥免密登录服务器,导致数据泄露或被恶意操作。处理方法:立即登录服务器,打开~/.ssh/authorized_keys文件,删除泄露私钥对应的公钥(即之前添加的以“ssh-ed25519”开头的那行内容);然后在本地重新生成新的密钥对(按文章第一步操作,注意保存路径可换个名称,避免覆盖),并将新公钥重新添加到服务器的authorized_keys文件中,确保旧密钥彻底失效。
可以给多台设备(如公司电脑、家里笔记本)配置同一服务器的免密连接吗?
完全可以。操作方法和单台设备相同:在每台设备上分别生成SSH密钥对,然后将每台设备的公钥(id_ed25519.pub内容)依次添加到服务器的~/.ssh/authorized_keys文件中,每个公钥占一行即可。这样所有设备都能通过各自的私钥免密连接服务器,且互相不影响,适合需要在多设备间切换开发的场景。
服务器IP地址变了,之前的免密配置还能用吗?如何更新?
服务器IP变更后,只需更新VSCode的SSH配置文件即可继续使用免密连接。具体步骤:打开VSCode的“远程资源管理器”,点击“SSH目标”旁的齿轮图标打开config文件,找到对应服务器的Host配置,将HostName的值修改为新的服务器IP,保存文件后重新连接即可。私钥和公钥无需重新生成,因为免密认证依赖的是密钥配对,与IP无关。