VS Code使用ssh密钥连接linux服务器

环境介绍

  • Ubuntu20.04LTS(虚拟机安装)
  • windows10_1909客户机
  • VS Code预览版
  • Xftp7

准备工作

安装VS Code扩展插件

  在VS Code的扩展商城中搜索Remote Development插件进行安装:

使用VS Code远程登陆

  1.选择配置文件进行编辑:
  安装好扩展插件之后,左侧菜单栏会出现远程连接的图标,点击图标可以看到当前的远程选项,点击齿轮按钮在右侧弹窗中选择用户文件夹下config文件进行编辑:
  2.编辑配置文件:
  编辑配置文件,最基本的选项有Host、HostName、User等,VS Code编辑该配置文件时有智能提示,可以有效帮助我们编辑。其中配置字段的含义如下:

Host Ubunt20.04_test
    HostName 192.168.200.113
    User ubuntu
# Host表示该远程机器的名称,可以任意起名字
# HostName表示当前远程机器的ip地址,也可以使用域名进行映射
# User表示当前的登陆用户
# 可以添加多个标签,配置多个远程目标的相关参数,如下图所示


  3.登陆
  在需要登陆的远程机器名称上右键,选择在当前窗口登陆或者在新窗口登陆,然后根据提示选择登陆的系统类型并输入登陆密码,实现登陆:

  登陆成功后,可以看到右下角显示为Ubuntu的终端

生成并配置密钥

使用ssh生成密钥

  密钥可以使用window生成,也可以使用Ubuntu生成,这里我们选择在Ubuntu系统中生成密钥,步骤如下所示:
  1.使用ssh命令生成密钥

ssh-keygen

  2.确定保存路径,这里直接使用Enter键使用默认路径

Generating public/private rsa key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa):
Created directory '/home/ubuntu/.ssh'.

  3.使用密码对密钥进行加密,如果需要则输入两次密码(我们这里使用Enter键跳过,不使用加密)

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

  4.生成密钥提示

//id_ras是私钥,id_ras.pub是公钥
Your identification has been saved in /home/ubuntu/.ssh/id_rsa
Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub

部署公钥

  1.进入密钥存放的文件夹

cd ~/.ssh

  2.新建认证密钥的文件authorized_keys,这里使用cat命令直接将公钥追加在文件中,如果没有这个文件,以下命令会自动生成

cat id_rsa.pub >> authorized_keys

  3.修改文件权限,以保证连接成功

sudo chmod 600 authorized_keys
sudo chmod 700 ~/.ssh

配置SSH登陆权限

  1.使用以下命令查看并修改ssh的配置文件

sudo vim /etc/ssh/sshd_config

  2.保证22端口有效,RSA认证有效,Pubkey认证有效,如下所示:

Port 22
RSAAuthentication yes
PubkeyAuthentication yes

  3.重启ssh服务

sudo service sshd restart

部署私钥到客户端(windows)

  使用Xftp登陆Ubuntu系统,将生成的密钥,从保存的文件夹中下载到windows用户的.ssh文件夹下,如下图所示:
  可以对私钥进行重命名,这样就可以分别配置多个远程机器的ssh密钥登陆,比如图片中的local_id_rsaremote_id_rsa
  因为密钥本身就是文本,所以我们也可以直接手动创建文件,然后直接将内容粘贴复制到windows主机上对应的文件上。

修改VS Code配置文件并登陆

修改VS Code配置文件

  在VS Code配置文件中相应的Host下添加字段IdentityFile,字段内容为公钥的文件路径,效果如下所示:

Host Ubunt20.04_test
    HostName 192.168.200.113
    IdentityFile ~/.ssh/id_rsa
    User ubuntu

  如果配置了多台远程的登陆信息,则需要将不同的密钥进行重命名以进行区分。

使用ssh密钥登陆

  重新启动窗口,进行登陆,可以发现不需要进行密码验证了。在这时候,可以在ssh登陆权限中关闭密码认证,只允许用ssh密钥连接,以保证安全性。

常见问题

已有的ip地址更换了主机,导致无法登录

  已经登录过的主机会在本地保存登录的公钥。如果HostName没变,但是更换了远程的主机会导致连接失败。我们可以通过删除相关记录来解决这个问题,windows和linux系统中该记录在以下文件中:

# windows
C:/Users/用户名/.ssh/known_hosts

# linux(ubuntu)
~/.ssh/known_hosts

  清除其中旧的数据项,然后重新连接即可。


当珍惜每一片时光~