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_rsa
和remote_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
清除其中旧的数据项,然后重新连接即可。
Comments | NOTHING