端口转发提供:
1.加密 SSH Client 端至 SSH Server 端之间的通讯数据。
2.突破防火墙的限制完成一些之前无法建立的 TCP 连接。
但是只能转发tcp连接,想要转发UDP,需要另外安装软件。
场景一:
现在有A,B两台机器,可以互相ssh访问,但是B上防火墙组织所有其他端口访问,想通过ssh转发,让A的8000端口访问B上8001端口。
A的ip:192.168.66.19
B的ip:192.168.66.78
B内开启防火墙 systemctl start firewalld。
从A访问B的8001端口会返回:
OSError: [Errno 113] No route to host
在A上配置远程转发:
ssh -L 8000:localhost:8001 -fN [email protected]192.168.66.78
加上不加fN会显示的登陆[email protected]建立连接,加上之后在后台建立。
修改测试脚本访问本地8000端口:
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((‘localhost‘, 8000)) client.send("hello world".encode(‘utf-8‘))
B机器上的server代码如下:
import socket import sys server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind((‘192.168.66.78‘, 8001)) while True: print("listening on 8001") server.listen(5) conn,addr = server.accept() print("accept ", addr) data = conn.recv(1024) print(data) conn.close()
结果显示
channel 2: open failed: connect failed: Connection refused
后来发现,B上的server代码需要监听的是本地的8001端口,代码改为:
server.bind((‘127.0.0.1‘, 8001))
再测试显示连接成功。
参考: https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/
远程转发和本地转发原理一样,区别只是在于在哪台主机上进行配置。
有一个缺点是,ssh转发普通用户就可以设定,如果想要取消转发功能,可以修改/etc/ssh/sshd_config,禁止转发。
原文地址:https://www.cnblogs.com/starRebel/p/11297863.html
时间: 2024-10-13 14:42:28