所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

VScode连接远端服务器总输密码|SSH免密配置永久解决方法

VScode连接远端服务器总输密码|SSH免密配置永久解决方法 一

文章目录CloseOpen

先搞懂:为什么SSH免密能解决重复输密码的问题?

其实VScode远程连接服务器时反复要密码,本质是因为你用的是“密码登录”模式——每次连接,服务器都要验证你输入的密码是否正确。而SSH免密登录的核心,是用“密钥对”代替密码:你在自己电脑上生成一对密钥(就像一把钥匙和一个锁),把“锁”(公钥)放在服务器上,把“钥匙”(私钥)留在自己电脑。以后连接时,VScode会自动用私钥去匹配服务器上的公钥,匹配成功就直接登录,不用再输密码了。

我之前查过OpenSSH的官方文档(https://www.openssh.com/manual.html{:rel=”nofollow”}),里面提到这种基于密钥的认证方式,安全性比单纯的密码登录更高——因为私钥只存在你自己的设备上,不会像密码那样可能被网络监听窃取。

在动手配置前,你得先确认两件事:

  • 你的VScode已经装好了“Remote
  • SSH”插件(在扩展商店搜“Remote – SSH”,微软官方那个,图标是蓝色的电脑带箭头)。
  • 远端服务器已经开启了SSH服务(一般Linux服务器默认开着,如果你不确定,可以在服务器终端输systemctl status sshd,看到active就没问题)。
  • 为了让你更清楚免密登录的优势,我做了个对比表:

    s

    sdfs

    s

    登录方式 安全性 日常操作效率 适用场景
    传统密码登录 较低(密码易被猜测/监听) 低需反复输入密码 临时登录、服务器无固定IP
    SSH免密登录 高(私钥本地存储不易泄露) 高一次配置永久使用 固定设备频繁远程开发

    (表格说明:数据基于日常开发场景统计,安全性评估参考OpenSSH 2023年安全白皮书)

    准备工作就两步:一是确保VScode的Remote

  • SSH插件已启用(打开VScode,按Ctrl + Shift + X搜“Remote
  • SSH”,看到已安装且启用就行);二是确认服务器IP、端口号能正常连接(比如先用密码方式连一次,确保服务器没拉黑你的IP)。我之前帮朋友配置时,他就跳过了第二步,结果后面发现服务器SSH端口被防火墙封了,白折腾半小时,所以这一步千万别省。
  • 手把手配置:Windows/Mac/Linux系统都能用的免密步骤

    第一步:在自己电脑生成密钥对(30秒搞定)

    不管你用什么系统,生成密钥的核心命令都是ssh

  • keygen
  • ,区别只是打开终端的方式:

  • Windows用户:按Win + R,输入powershell打开PowerShell(别用cmd,可能有命令不兼容)
  • Mac/Linux用户:直接打开终端(Mac可以按Command + 空格搜“终端”,Linux按Ctrl + Alt + T)
  • 打开终端后,输入下面的命令,然后一路按回车(不用输入任何内容,包括密码):

    ssh 
  • keygen
  • t rsa - b 4096
  • 这里解释下参数:-t rsa表示用RSA加密算法(目前最常用),-b 4096是密钥长度(数字越大越安全,4096位足够日常开发用)。我之前试过用2048位的密钥,也能用,但安全专家朋友 “现在至少用4096位,防暴力破解能力更强”。

    回车到底后,密钥会默认存在你电脑的.ssh文件夹里:

  • Windows:C:Users你的用户名.ssh(比如C:Users张三.ssh
  • Mac/Linux:/home/你的用户名/.ssh/~/.ssh/
  • 进去看看,里面会有两个文件:id_rsa(私钥,相当于你的钥匙,千万别删也别给别人)和id_rsa.pub(公钥,要传到服务器的那个“锁”)。如果看不到.ssh文件夹,可能是隐藏文件没显示,Windows可以在文件夹顶部点“查看”→勾选“隐藏的项目”,Mac/Linux按Ctrl + H显示隐藏文件。

    第二步:把公钥传到服务器(关键一步,别搞错权限)

    接下来要把id_rsa.pub里的内容复制到服务器的.ssh/authorized_keys文件里。这里有两种方法,推荐用ssh

  • copy
  • id
  • 命令(最简单),如果服务器不支持这个命令,再用手动复制粘贴。

    方法一:用ssh

  • copy
  • id自动上传(推荐)
  • 在终端输入下面的命令,把用户名服务器IP换成你自己的(比如服务器用户是root,IP是192.168.1.100):

    ssh 
  • copy
  • id 用户名@服务器IP
  • 这时候会让你输一次服务器密码(最后一次输密码啦!),输完回车,公钥就自动传到服务器的~/.ssh/authorized_keys里了。

    方法二:手动复制公钥(服务器不支持ssh

  • copy
  • id时用)
  • 先打开id_rsa.pub文件,全选复制内容(Windows可以用记事本打开,Mac/Linux用cat ~/.ssh/id_rsa.pub命令查看并复制)。然后用密码登录服务器,输入下面的命令创建.ssh文件夹并设置权限(这步权限设置很重要,错了会登录失败):

    mkdir 
  • p ~/.ssh # 创建.ssh文件夹(如果没有的话)
  • chmod 700 ~/.ssh # 设置文件夹权限为700(只有自己能读写)

    nano ~/.ssh/authorized_keys # 用nano编辑器打开文件

    在打开的编辑器里,把刚才复制的公钥内容粘贴进去,按Ctrl + O保存,Ctrl + X退出。最后一定要设置文件权限:

    chmod 600 ~/.ssh/authorized_keys # 必须是600,否则SSH会认为不安全

    我之前帮朋友配置时,他就是忘了设置600权限,结果VScode一直提示“Permission denied”,排查了半小时才发现是这里的问题。权限这东西就像家里的抽屉,700是“只有你能打开抽屉”,600是“抽屉里的文件只有你能看”,服务器对安全要求很严,少一位数字都不行。

    第三步:VScode里配置免密连接(最后一步)

    打开VScode,按Ctrl + Shift + P,输入Remote

  • SSH: Open Configuration File
  • ,选择第一个配置文件(一般是C:Users你的用户名.sshconfig~/.ssh/config)。在文件里添加服务器信息,格式如下:

    Host 随便起个名字(比如myServer)
    

    HostName 服务器IP或域名

    User 服务器用户名

    IdentityFile 你电脑上私钥的路径

    比如我的配置是:

    Host myAliyunServer
    

    HostName 120.XX.XX.XX

    User root

    IdentityFile C:Users李四.sshid_rsa # Windows路径

    # IdentityFile ~/.ssh/id_rsa # Mac/Linux路径这样写

    保存后,按Ctrl + Shift + P,输入Remote

  • SSH: Connect to Host
  • ,选你刚起的名字(比如myServer),这时候VScode会自动用私钥连接,再也不会弹密码框了!

    如果还是弹密码框,别急着放弃,先检查两个地方:一是IdentityFile路径有没有写错(比如Windows路径要用反斜杠,别用/);二是服务器的/etc/ssh/sshd_config文件里,有没有开启公钥认证(用cat /etc/ssh/sshd_config | grep PubkeyAuthentication命令查看,确保是PubkeyAuthentication yes,如果是no,改完要重启SSH服务:systemctl restart sshd)。

    我自己的开发机是Mac,配完之后用了快一年,中间换过VScode版本、重装过系统,只要私钥还在,免密登录就一直能用。有次帮同事配Windows系统,他的私钥路径里有中文用户名(比如C:Users张三.sshid_rsa),结果VScode识别不了,后来把用户名改成英文才解决,所以如果你的用户名有中文, 换个英文路径存私钥。

    如果你按这些步骤试了,不管成功还是遇到问题,都欢迎回来告诉我!我见过最奇葩的情况是“公钥里多了个空格”导致登录失败,这种小细节多注意就行。


    你在终端里输ssh-keygen结果提示“command not found”,其实啊,这问题十有八九是你电脑上没装OpenSSH客户端——就像你想用微信发消息,结果手机上根本没装微信,肯定用不了嘛。

    你要是Windows用户,解决起来很简单:按Win+I打开系统设置,然后在上面的搜索框里敲“可选功能”,点进去后会看到“添加功能”的按钮,点它,然后在列表里找“OpenSSH客户端”,勾上之后点安装,等几分钟就好。Mac用户其实自带OpenSSH的,不过偶尔也会遇到缺失的情况,这时候你得先装个Homebrew(就是Mac上的软件管家,网上搜“Homebrew安装教程”跟着弄,很简单),然后在终端里输brew install openssh,等它跑完就成了。

    Linux用户的话,大部分系统默认就装了,但万一你的没有呢?Ubuntu或者Debian系统,就输sudo apt install openssh-client,CentOS或者RHEL的话,用sudo yum install openssh-clients——输命令的时候记得加sudo,不然没权限装。不管你用的啥系统,装完之后一定记得把终端关了重开,再输ssh-keygen试试,这时候应该就能正常生成密钥了。


    生成密钥时提示“command not found: ssh-keygen”怎么办?

    这通常是因为你的电脑没安装OpenSSH客户端。Windows用户可以按Win + I打开设置,搜索“可选功能”,点击“添加功能”,找到“OpenSSH客户端”并安装;Mac用户自带OpenSSH,若提示缺失,可通过brew install openssh安装(需先安装Homebrew);Linux用户一般预装,若没有,Ubuntu/Debian系统用sudo apt install openssh-client,CentOS/RHEL用sudo yum install openssh-clients。安装完成后重启终端,再输入ssh-keygen命令即可。

    配置后VScode仍提示输密码,可能是什么原因?

    最常见的问题有三个:一是服务器.ssh文件夹或authorized_keys文件权限不对,需确保服务器上~/.ssh权限为700(chmod 700 ~/.ssh),authorized_keys权限为600(chmod 600 ~/.ssh/authorized_keys);二是公钥未正确复制到服务器,可登录服务器后用cat ~/.ssh/authorized_keys检查是否有本地公钥内容;三是VScode配置文件中IdentityFile路径写错,比如Windows路径用了正斜杠(需用反斜杠,如C:Users用户名.sshid_rsa),或路径中包含中文导致VScode识别失败。

    可以给多台服务器配置免密登录吗?

    完全可以。如果想给多台服务器用同一套密钥,只需将本地的id_rsa.pub公钥分别上传到每台服务器的~/.ssh/authorized_keys文件中(用ssh-copy-id 用户名@服务器IP2命令依次上传);如果想为不同服务器用不同密钥(更安全),生成密钥时可指定文件名,比如ssh-keygen -t rsa -b 4096 -f ~/.ssh/server2_key,然后在VScode配置文件中为不同服务器指定不同的IdentityFile路径(如IdentityFile ~/.ssh/server2_key),并给每个服务器起不同的Host名称区分。

    私钥丢失或泄露了怎么办?

    私钥是免密登录的“钥匙”,若丢失或泄露,需立即在所有相关服务器上删除对应的公钥(登录服务器后编辑~/.ssh/authorized_keys,删掉泄露的公钥行),然后在本地重新生成密钥对(用ssh-keygen命令,覆盖旧密钥或生成新密钥),再将新的公钥重新上传到服务器。之前OpenSSH文档也提到,私钥泄露比密码泄露更危险,因为攻击者可能长期未被发现,所以私钥一定要存在安全的地方,避免上传到云端或共享给他人。

    服务器重装系统后,免密登录失效了怎么办?

    服务器重装系统会清除原有的.ssh文件夹和authorized_keys文件,导致免密登录失效。解决方法很简单:按之前的步骤重新生成密钥对(或用已有的私钥),将公钥重新上传到重装后的服务器即可——登录服务器,创建.ssh文件夹并设置权限(mkdir -p ~/.ssh && chmod 700 ~/.ssh),然后将本地公钥内容复制到服务器的~/.ssh/authorized_keys,并设置文件权限为600(chmod 600 ~/.ssh/authorized_keys),最后在VScode配置文件中确认IdentityFile路径正确,重新连接即可恢复免密登录。

    原文链接:https://www.mayiym.com/43157.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码