技术解析

有办法用 SSH 给跳板机后的机器做端口映射吗?
0
2021-06-22 08:23:34
idczone

有台测试的机器通过跳板机可以进行 ssh 登录

有办法在本地给远程这台测试机做一个端口映射吗?


http://blog.creke.net/722.html 这样吗。

对,类似这样,但是在跳板机后面没法直连目标机器

映射两次吧,目标机 22 端口→跳板机 1022 端口→本机 2022 端口

proxifier 这个软件可能有用

跳板机我没有操作权限。。

应该不行,我没法操作跳板机

这样?
https://blog.nanpuyue.com/2017/035.html

欢迎使用商业版
我们的产品也是类似,但是支持 ssh 端口转发,也支持 proxycommand

有 2 种方式 iptables nat 可行不?
ssh 的端口映射,尝试下,不过有条件,需要有个外网机
http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html



前面说了我没有跳板机的操作权限。。。
跳板机是有一层屏蔽的,不是单纯的中间代理,连上后有菜单要选择下一步跳转的机器
没法直接用原生 ssh 做转发的

谢谢指导,我研究下 proxycommand

https://github.com/joyqi/socket-pipe






我想错了,ssh 转发应该行。只是我这里跳板机上自配了一层认证信息,我好像没法传递这个认证
我的机器 A,跳板机 B,目标机 C
A 连接 B,靠认证信息 x
B 连接 C,靠认证信息 y
我试着直接靠 B 做代理转发,会在 B 的输出上看到提示
channel 3: open failed: administratively prohibited: open failed

监听高位端口(端口号>1024)就不需要特权, 例如 11022

好像还没到监听端口这一步,我权限验证还没传递过去,连不上目标机 C

感谢楼主提供的好工具。
可以试试 Nginx TCP 反向代理,相当好用呦

使用 ssh 开隧道不行么,A 机器端口:111 (随意设),目标机 C 端口:222,跳板机 B
ssh -L 111:C:222 B
在机器 A 访问 localhost:111 即可

后面的机器联网么?联网的话用 ngrok 之类的直接打出来,虽然明显很不安全


B 和 C 的授权都是什么类型?用不同 ssh 私钥都不是问题,本地做一个 ForwardAgent yes,在~/.ssh/config 配置好即可
Host *
ForwardAgent yes
Host B
HostName x.x.x.x
IdentityFile ~/.ssh/key-a
User aaa
....
Host C
HostName y.y.y.y
IdentityFile ~/.ssh/key-b
User bbb
ProxyCommand ssh -q -W %h:%p B
...
只要 B 到 C 的登录信息是固定的,就可以这样配置
然后应该是可以直接在本地登录 C:
ssh C
能登录就可以做通道:( 9000 为例)
ssh -f -N -L 9000:127.0.0.1:9000 C

tmate 这个软件是否可以?共享 ssh

不知道这个跳板机是什么玩法,我一般是两种方式
1:
ssh -L 10022:host_c:22 [email&/>然后:
ssh -p 10022 [email&/>打开 ForwardAgent
然后 ssh [email&'ssh [email protected]_c'

nginx 反代应该是别的话题?

感谢回复,C 的认证信息是存在 B 上的,我这 A 上没有认证信息


方法 1 不行,见我 append 的信息
方法 2 试了下,-vvv 里看到到 hostB 的认证是没问题的,但是再执行下一个 command 的时候过不去
debug3: send packet: type 50
debug3: receive packet: type 52
debug1: Authentication succeeded (publickey).
Authenticated to xxx.xx.xx.xx ([xxx.xx.xx.xx]:22). />debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug3: send packet: type 90
debug1: Requesting [email&/>debug3: send packet: type 80
debug1: Entering interactive session.
debug1: pledge: network
debug3: receive packet: type 91
debug2: callback start
debug1: Requesting authentication agent forwarding.
debug2: channel 0: request [email&confirm 0
debug3: send packet: type 98
debug2: fd 3 setting TCP_NODELAY
debug3: ssh_packet_set_tos: set IP_TOS 0x08
debug2: client_session2_setup: id 0
debug1: Sending command: ssh hostC
debug2: channel 0: request exec confirm 1
debug3: send packet: type 98
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel 0: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: exec request accepted on channel 0

这个看起来有点像 ngrok 一样在 C 上开第三方服务做中转了

嗯,是联网的。能不走第三方最好了。。。

需要-t

ngrok 被扫描很烦。。。。

什么样的登录方式?说的不是很清楚。如果是 ssh-key 的话:
1. 把 B 上的私钥下载到 A 本地来,按我上面写的,在本地配置 B 到 C 的登录
2. 用间接登录的方式把 A 本地自己的公钥加到 C 的$HOME/.ssh/authorized_keys 里,在本地用同一个私钥来配置 B 到 C

B 和 C 都是运维配置的,我也不是很清楚具体的登录方式,目前从 A 登上 B 之后会有一个选择菜单出现,选完后连上 C,猜测是 B 到 C 上有配置好相应的 KEY。B/C 我都没有权限干你提到的 1 和 2 这两件事。。。

被扫到会怎么样?我没用过 ngrok

请问找到解决方案了吗。。我也遇到这个问题了

木有。。

楼主找到解决方案了吗 我也遇到这个问题了

放弃了。。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服