一次免登录跳板机直连服务器的作死记录
本文最后更新于 887 天前,其中的信息可能已经有所发展或是发生改变。

这篇文章距离上次更新正好400天,希望本次重新开始能维持一段时间的热情。我更新博客大多是不想干活了才来更新。

注意: 绕过跳板机直连服务器在任何情况下都是极度危险的行为!尤其不要把内网端口暴露在外网,否则可能会让你吃上免费饭!本实验实际上并没有绕过跳板机,内网服务器与外网还需要VPN+proxy两次认证。

动机

去年的保研卷卷大赛中我有幸卷到了计算所某大佬名下的直博,然后就进组开始打工了。实验室提供了一个Anyconnect的VPN接入跳板机,然后跳板机可以访问内网服务器。

但是我其实不太理解,为什么我用了VPN之后,还是不能直接访问服务器呢?之前给字节打工的时候,连上Seal之后Google都能打开。我的推测是担心ip路由撞了或者什么别的问题(比如强制要求),当然具体如何我也不太关心了——我只知道非要先连VPN,再RDP到跳板机,最后再用Putty连服务器 === 工作效率为0。

疫情一来我还不好出校,那我可怎么完成任务啊!(内心OS:

跳板机调整

首先,我们默认你没有跳板机管理员权限。如果你有,请不要浪费时间在这里,看点别的不香吗。

在这个条件下,我们能做的事就非常有限了:

  1. 一般跳板机的系统是精简过的,缺失一些你想要的基础库,你还安不上去。
  2. 跳板机的配置不会太高,如果好几个人一起远程桌面上去,都开IDE会直接卡到飞起。(比如我们组的是E562032G RAM
  3. 懒得给IT管理员提需求,能技术解决为什么要找人

根据以上的限制,策略就非常明确了:把内网服务器暴露给本地的设备直接访问,而不是在跳板机上连。之后就VS Code Remote直接远程开发,以及SSH port forward随便转发你需要的端口,以及SFTP直接处理文件(或者远程挂载FS)。

V1版本

我在北邮这边有一个有公网v6的服务器,于是我想的是搭建反向ssh隧道:

  1. jump -> local-server with ssh -R
  2. client -> local-server -> remote-server

但是在实行的时候还发现跳板机的防火墙阻止SSH出站,于是我就用了一下代理软件(Trojan,其实只要不是明文代理都行)绕过这个限制,明显这里有违规了x 最后拓扑就是这个样子:

  1. jump -> local-server with Trojan
  2. jump ===> local-server with ssh -R
  3. client -> local-server -> remote-server

至于jump连接local-server暴露端口肯定用不了原生命令,直接用了MobaXterm的隧道工具,还带了自动重连就很不错。然后代理软件的客户端也选了Clash for windows,原因是这两个软件都提供 User Standalone 版本,可以直接运行。

然后在CFW设置本地代理端口的时候,注意选择高位端口。因为没有管理员权限是不能在低端口上监听的。

优点

Client上什么都不需要额外运行,直接写好ssh_configproxy_jump就可以正常工作

缺点

如果要连接新的机器,需要在Jump Server上手动配置添加。

V2 方案

这个方案也是今天才实验好的,因为那个v6服务器因为不可抗拒的原因下线了,我这边又有很多实验要跑,就临时赶出来了。去掉了local-server的依赖。拓扑逻辑大概如下:

  1. Jump-server run proxy-server with auth
  2. Client -> Jump-server in VPN
  3. Client ===> Server with socks5/http

利用了Clash自带的Allow lansocks/http auth功能,跑了一个小的代理服务器。这样Client连上VPN之后就可以直接通过这个代理访问了。

优点

如果要连接新的机器,不需要手动配置添加

缺点

Client需要额外运行OpenConnect/AnyConnect

客户端配置

其实主要是ssh_config的配置

V1版本

直接跳板机连接

Host JumpServer
    HostName 10.3.*.*
    PreferredAuthentications publickey
    IdentityFile "/c/Users/userName/.ssh/id_ecdsa"
    User makiras
    ForwardAgent yes
    IdentityAgent SSH_AUTH_SOCK

Host RemoteServer
    HostName 127.0.0.1
    Port 50022 # mapped port
    RemoteForward 1080 127.0.0.1:1080
    PreferredAuthentications publickey
    IdentityFile "/c/Users/userName/.ssh/id_ecdsa"
    User makiras
    ProxyJump JumpServer

V2版本

SSH配置文件

Host ict-revp-xxx
    HostName 10.16.xxx.xxx
    RemoteForward 1080 127.0.0.1:1080
    PreferredAuthentications publickey
    IdentityFile "/c/Users/userName/.ssh/id_ecdsa"
    User makiras
    ForwardAgent yes
    IdentityAgent SSH_AUTH_SOCK
    ProxyCommand  sh ~/.ssh/proxy-ict.sh %h %p

注意:

  1. ProxyCommand使用 sh是因为默认情况下,windows git不会将bash加入到PATH中。
  2. 使用脚本是为了不用手动输入connect为代理提供的密码。

脚本

$1 $2就是传入参数的%h %p

#!/bin/bash

export HTTP_PROXY_PASSWORD="this-is-auth-token!"
connect -H makiras@jump-server-ip:port -a none $1 $2

成果

OpenConnect一开,就能VS Code Remote辣。

ict-jump.jpg

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇