(一次比较艰辛的“摸鱼”过程,但成功免密连接远程服务器之后感觉很不错!!!)
1、效果图
先领略一下最终的效果,
可以在VS Code中创建、删除、编辑服务器端的文件,当然也有linux的命令行。还是挺方便的~
2、从VS Code的应用扩展商店添加Remote Development
插件
- ① 点击左侧栏下方的
extensions
图标
- ② 输入
remote
,弹出相关扩展 - ③ 找到
Remotem Development
,点击install
(在这里一定要安装Remotem Development
,包含的其他扩展会自动安装)
安装完成后,多了椭圆形标记的Remote Explorer
图标。
在ENABLED
下会出现Remote
相关的5个插件,如下图所示:
3、配置Remote SSH
- ① 在VS Code中,
Ctrl + ,
,输入show login terminal
,勾选
- ② 在VS Code中,
Ctrl + Shift + P
,输入remote-ssh
-
③ 通常选择第一个,
- ④ 添加配置信息
这里IdentityFile
为下面步骤生成的本地私钥路径
如果有多个连接,可以配置多个。因此一台PC可以连接到多个远程服务器端
4、配置免密登录
VS Code通过SSH远程服务连接远程服务器,每次连接、打开文件夹、执linux命令等都需要输入密码,非常麻烦。
可以通过配置免密登录避免每次操作时都输入密码。
4.1 本地PC端本地安装SSH
Windows系统可以安装OpenSSH或者通过Git安装SSH,方法不在这里赘述。
在命令行中输入如下命令表示本地SSH安装成功:
- ①
Win + R
-->cmd
-->确定
- ②
ssh
4.2 生成本地PC端密钥
- ①
cd .\.ssh
,进入.ssh
目录
- ②
ssh-keygen -t rsa
,生成密钥。出现以下选项时:
Enter file in which to save the key:直接回车
Enter passphrase:直接回车
Enter same passphrase again:直接回车
- ③
dir/b
查看创建好的密钥文件
/b
是仅列出文件名称
id_rsa
是密钥
id_rsa.pub
是公钥
记得回去将id_rsa
的路径添加到3④的IdentityFile
中!
4.3 上传公钥至服务器端个人所在的根目录的.ssh/
下
由于是非root用户,所以需要在远程服务器进行以下步骤:
- ① 若不存在
.ssh/
,手动创建
mkdir .ssh
- ② 进入
.ssh/
cd .ssh/
- ③ 使用Xftp等工具(或者
scp
命令)将id_rsa.pub
上传至该目录
- ④ 将
id_rsa.pub
的内容追加至authorized_keys
cat id_rsa.pub >> authorized_keys
ls
authorized_keys
文件可以按行存储多台本地PC的公钥,因此可以使用不同的本地PC连接同一个远程服务器端
- ⑤ 修改权限
修改authorized_keys
权限为600
chmod 600 authorized_keys
修改
.ssh/
权限为700
chmod 700 .ssh
在这里一定要修改以上二者的权限(解决方法,参考记一次ssh免密登录踩坑and Debug之路),不然即使进行下一步后,在cmd命令行通过
ssh username@ip_adress -p port
免密登录仍然失败,提示输入密码(debug提示参考SSH远程登录主机失败,求路过的高手指点迷津)
# 上面还有很多debug提示
debug1: Trying private key: /root/.ssh/id_dsa
debug1: Trying private key: /root/.ssh/id_ecdsa
debug1: Trying private key: /root/.ssh/id_ed25519
debug1: Next authentication method: password
在服务器端查看sshd日志,会出现类似下面的语句:
Authentication refused: bad ownership or modes for directory /root
原因是:~/.ssh
文件需要只供用户自己读、写、执行(权限为700
),而其他用户不可以有任何权限
- ⑥ 重启服务器端SSH
方法1:由于是==非root==用户,使用sudo
sudo service sshd restart
方法2:sudo
仍然没有权限的可以请root用户帮忙~
方法3:或者exit
退出此次登录。随后再重新登录服务器即可。
5、连接
-
① 新建连接
- ② 选择
Linux
在这里如果连接失败,可以重新启动VS Code - ③ 新建linux命令行终端
之后便可以达到本文开头展示的效果啦~~
tips:3①、5②也可以通过设置settings.json
文件达到同样的效果
"remote.SSH.showLoginTerminal": true, "remote.SSH.remotePlatform": { "pangu": "linux" }
References: