部分学校或公司的服务器需要先登录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 user@target自动通过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/


文章版权归 FindHao 所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明作者 FindHao 和本文原始地址:
https://findhao.net/easycoding/2579.html

Comments