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上。