技术解析

SSH 端口转发配置问题
0
2021-07-12 01:42:05
idczone

SSH端口转发,想把http://hostA:3555 映射到hostB的 http://127.0.0.1:8090

hostA的用户名是:tt
hostA上SSH服务器端口号为:44444

hostB上执行:

ssh -C -f -N -g -R 3555:127.0.0.1:8090 -p 44444 [email protected]

可就是没法通过http://hostA:3555访问到127.0.0.1:8090的一个网页啊。。
网页代码是:

import tornado.web
import tornado.ioloop
import time

class MainHandle(tornado.web.RequestHandler):
    def get(self):
        print("hello!",time.asctime())
        self.write("hello!")

if __name__ == "__main__":
    app = tornado.web.Application([(".*", MainHandle)])
    app.listen(8090)
    tornado.ioloop.IOLoop.instance().start()

HostA的ssh配置文件里加一条: GatewayPorts yes

O(∩_∩)O谢谢啦,昨天没有root权限,改不了。后来在本地装了虚拟机试了。

楼主 这个映射是不会暴露到公网上的
你去 HostA 上面 curl 一下 127.0.0.1:3555 就知道了

Host A:
ssh -N -q -R 8090:hostA:44444 [email&[email&-p 44444 就能进入hostA,3555不需要是摆设。

修改:
在host B上 :
ssh [email&-p 8090

你到底要映射ssh还是映射端口?如果映射ssh的话,就像楼上的,
映射端口的话,不需要ssh了,在hostB上运行iptables就可以了

我觉得ssh应该在hostA上执行吧?试试这个:
在HostA上执行:
ssh -NT -q -R 8090:ip_of_hostA:3555 [email&/>然后在HostB上:
telnet 127.0.0.1 8090

Sorry 忽略我以上的回答:

-R
.....
By default, the listening socket on the server will be bound to the loopback interface only. This may be overridden by specifying a bind_address. An empty bind_address, or the address `*', indicates that the remote socketshould listen on all interfaces. Specifying a remote bind_address will only succeed if the server's GatewayPorts option is enabled (see sshd_config(5)).
.....
根据以上的man ssh的信息:所以楼主要做的就是:
1,编辑HostA的 /etc/ssh/ssd_config 然后加入
GatewayPorts yes
2. 在HostB上执行:
ssh -N -T -q -R *:3555:127.0.0.1:8090 -p 44444 [email&/>或者
ssh -N -T -q -R :3555:127.0.0.1:8090 -p 44444 [email&/>或者
ssh -N -T -q -R hostA_ip_address:3555:127.0.0.1:8090 -p 44444 [email&*: 或者只加 : 或者将 * 替换成 hostA的IP地址,因为不加这个的话,默认绑定到hostA的127.0.0.1上。

数据地带为您的网站提供全球顶级IDC资源