部分学校或公司的服务器需要先登录vpn才能登录,本文记录了在虚拟机的win10中登录vpn,host的Linux下ssh登录服务器的方法。
配置虚拟机里的win10
正常安装win10,并打开ubuntu子系统(或许也可以直接使用win10的ssh),然后sudo apt install openssh-server
安装openssh server。编辑/etc/ssh/sshd_config
里的端口配置,sudo service ssh start
重启ssh。
安装vpn,并登录。在登录后,会发现wsl里的ubuntu无法再联网。参考Windows Subsystem for Linux 切换网络脚本设置一个刷新dns的脚本即可。
cd ~
wget https://gist.github.com/matthiassb/9c8162d2564777a70e3ae3cbee7d2e95/raw/b204a9faa2b4c8d58df283ddc356086333e43408/dns-sync.sh
sudo mv dns-sync.sh /etc/init.d/dns-sync.sh
sudo chmod +x /etc/init.d/dns-sync.sh
unlink /etc/resolv.conf
每次切换网络时需要手动执行最后的一句命令:
sudo service dns-sync.sh start
在host测试能否ssh登录
先关闭虚拟机里的vpn,将虚拟机的网络模式改为nat,以便获取到和你host同级的ip。参考 服务器、VPS等安全防护教程,设置公钥登录。
因为我们最终实现的是要host A --> 虚拟机win10 B--> target C,所以方便起见,最好这两次ssh都用同一个密钥。
同时在虚拟机里开启vpn,执行刷新dns的命令以后,看能否成功登录目标服务器C。
最终的ssh命令
在测试host可以正常ssh 虚拟机B,虚拟机B可以正常ssh 服务器C以后,就可以使用虚拟机B作为我们的跳板,从host A登录target C。
ssh -i .ssh/jump_key findhao@target.c -p 1234 -J findhao@vbox.b
-i
来指定ssh key,如果你host的ssh-agent正常工作,且你的key可以在ssh-add -l
中显示出来的话,可以不加这个参数
[email protected] -p 1234
是目标服务器的登录信息
-J [email protected]
是中间跳板虚拟机的信息,-J
功能需要ssh>7.3 (ssh -V
)。
通过proxyjump简化最后的ssh命令
可以配置~/.ssh/config
来使得默认的ssh [email protected]
自动通过jump节点转发ssh请求。这样,直接可以使用ssh target.c
来登录target.c
服务器。
# 名字自己定
Host jumper
# 虚拟机ip
HostName vbox.b.ip
User findhao
IdentityFile ~/.ssh/jump_key
Host target.c
# 目标机器
HostName target.c.com
User findhao
Port 1234
# 使用的jumper名字就是上面定义的配置名字
ProxyJump jumper
IdentityFile ~/.ssh/jump_key
Reference
https://www.hanselman.com/blog/how-to-ssh-into-wsl2-on-windows-10-from-an-external-machine
https://blog.csdn.net/wudinaniya/article/details/80956158
https://vra.github.io/2020/03/04/wsl-dnc-sync/
https://wiki.gentoo.org/wiki/SSH_jump_host
https://www.codewoody.com/posts/11038/
Comments