0%

VSCode使用ssh-key远程登录服务器

兼谈使用SSH转发加快教研室网上冲浪速度

Mobaxterm挺好用的,只是那个文本编辑器不舒服,而且有点卡顿 试着用一下VSCode的remote-ssh,平时连上服务器改点东西或者 通过ssh-key登录就不多讲了[1]

Mobaxterm设置SSH密钥登录

ssh-keygen生成密钥之后在Mobaxterm的SSH设置找到Advanced SSH Setting里勾选import SSH key可以直接导入密钥。 退出再登录显示这样

1
Authenticating with public key "Imported-Openssh-Key: id_rsa"

就是成功了(失败会提示这样Server refused our key)

VSCode设置SSH密钥登录

装Remote-ssh插件,然后左边框会有个小电脑的图标,点那个图标,再点SSH TARGETS的设置(Configure),进行配置 它有个配置文件,一般在C:/Users/<username>/.ssh下面的config 编辑它的配置文件,Host随便填,HostName填ip,User填用户名,IdentityFile填私钥路径,Port填端口(默认22可以不填) (要是认证失败什么的,建议把那些.ssh文件夹底下的文件删了,比如known_hosts)

1
2
3
4
5
Host workstation
HostName hostname
User user
IdentityFile C:/Users/XXX/.ssh/id_rsa
Port 22

连接的时候可能会让你手动在termial里的信息 这样应该就行了, 不用每次输密码了。看到那个

什么?想用密码不想用ssh-key密钥登录,不能保存密码嘛? 您好,官方文档说不能 >Yes, you should be prompted to enter your token or password automatically. However, passwords are not saved, so using key based authentication is typically more convenient

这个特性不能怪vscode不支持,按照ssh的设计,为了安全原因是要确保密码是键盘输入的而不是在bash脚本或者命令里附带的。其实像xshell、mobaxterm或者sshpass那种保存密码的做法是违背了ssh安全设计的初衷的。(扯远了,建议大家直接使用密钥)

(当然这里是新出的功能,bug当然少不了,我就遇到过这样的, 一般遇到问题先升一下最新版或者用insider试试,再不行就去GitHub提issue) 其他的问题找官方文档[2]看看,貌似可以SSH端口转发

远程SSH的VSCode插件是单独的,可以自行安装 如果你要配置多台主机SSH,在配置文件里并列加配置就行了

1
2
3
4
5
6
Host workstation
HostName hostname
User user
Host Server
HostName hostname
User user

更新,现在vscode多了一个选项,是选择远程机子是linux、win或者mac,第一次的时候要自己选一下

更新,现在不需要写配置文件了,直接选add new ssh host,直接Enter SSH Connection Command,会自动把你的命令转成配置保存。

1
ssh -i C:/Users/xxx/.ssh/id_rsa_221 [email protected] -p 22

SSH端口转发

老网民很熟悉的网上冲浪手段之一就是SSH Tunnel[3]。当只开了22端口的时候可以用这种方法绕过防火墙用TCP之类的,当然,这种方法曾经也用来突破那个巨大的防火墙 。

使用Mobaxterm和SwityOmega插件可以满足大部分上网需求

MobaXterm里选Tools > MobaSHHtunnel > New SHH tunnel > Dynamic Port forwarding (SOCKS proxy)

那个Dynamic Port 是动态转发,不是v2ray那种用来防止被封的动态端口,就是你本地的端口会被转到服务器上相同的端口,是sockets5代理 配置你的端口和密钥(最好把那个autostart和Autoconnect也选上),然后到SwityOmega之类的工具里面填上相应的端口,就可以愉快的上网了。从浏览器的IP查询网站看一下IP,已经是服务器的IP了

终端的命令可以看这篇[4],此处略过

这里可以利用SSH端口转发通过跳板机让VSCode远程开发,只要在配置上加一条Proxy Command ssh -q -W %h:%p hostname就好了(hostname为上面配置中的跳板机的名称)

1
2
3
4
5
6
7
8
9
10
Host 跳板机
HostName 211.83.000.000
IdentityFile C:/Users/zjk/.ssh/id_rsa_221
User root
Port 22
Host 目标机
Hostname 211.83.111.111
Port 22
User root
ProxyCommand ssh -q -x -W %h:%p 跳板机

这样通过跳板可以访问校内不对外开放IP的机子了

本地端口转发

VSCode现在remote-ssh选项里里有FORWARDED PORTS,可以直接选要转发的端口,将远程的本地端口转发到自己现在的机子上。这样在远程起一个调试的端口,就可以直接在本地看了。

类似下面这种命令

1
ssh -L <local port>:<remote host>:<remote port> <SSH hostname>

的功能

image-20200516210656466

跳板机加速上网

不跨区跨运营商,不用担心被FIREWALL制裁, WireGuard可以用了呀... 有空试试这新生代VPN, 底层貌似是UDP,红龙LOGO挺拉风的(跑题了 WireGuard据说要加到新的Linux Kernel里面,但是现在教研室的老Ubuntu只能自己装(这个我18年就听说了要加进kernel啦,连Linus都说好要加[5]然而鸽到现在,还是没加,据说作者在搞windows的,现在做的差不多了,要回来折腾Linux了) 之前WireGuard由于流量特征太明显就换了v2,现在试试这个 安装比Openvpn简单,挺轻量的一个东西

仅仅做跳板的话Gost也挺好用

其他

开机自启

1
systemctl enable [email protected]

使用VSCode愉快的写C/C++

装C/C++和coderunner插件就行了,现在可以自动配置运行和调试的文件了(就那个以前一堆坑还经常改一更新就配置失效的launch.json和config.json)

VSCode连接Docker

安装Docker和Docker compose插件(在远程里面),然后直接用就行了


  1. 1.SSH密钥登录 ↩︎
  2. 2.官方文档:Remote Development using SSH ↩︎
  3. 3.墙与梯的较量 ↩︎
  4. 4.实战 SSH 端口转发 又看到一个讲的不错的玩转ssh端口转发 ↩︎
  5. 5.Linus在邮件中回复说: >Btw, on an unrelated issue: I see that Jason actually made the pull >request to have wireguard included in the kernel. > >Can I just once again state my love for it and hope it gets merged >soon? Maybe the code isn't perfect, but I've skimmed it, and compared to the horrors that are OpenVPN and IPSec, it's a work of art. 见https://lkml.org/lkml/2018/8/2/663 ↩︎
  6. 6.Setting up WireGuard on Windows ↩︎