测试ssh转发

端口转发提供:html

1.加密 SSH Client 端至 SSH Server 端之间的通信数据。linux

2.突破防火墙的限制完成一些以前没法创建的 TCP 链接。ssh

可是只能转发tcp链接,想要转发UDP,须要另外安装软件。socket

 

场景一:tcp

如今有A,B两台机器,能够互相ssh访问,可是B上防火墙组织全部其余端口访问,想经过ssh转发,让A的8000端口访问B上8001端口。测试

A的ip:192.168.66.19加密

B的ip:192.168.66.78spa

B内开启防火墙 systemctl start firewalld。.net

从A访问B的8001端口会返回:code

OSError: [Errno 113] No route to host

在A上配置本地转发:

ssh -L 8000:localhost:8001 -fN test@192.168.66.78  #         ssh -L <localport>:<remotehost>:<remoteport> <SSHhostname> 这里<remotehost>和<SSHhostname>都是B机器,
<SSHhostname>表示接受ssh链接的机器,而<remotehost>表示最终被转发的机器,二者能够是两个机器,实现穿透防火墙。

加上不加fN会显示的登录test@192.168.66.78创建链接,加上以后在后台创建。

修改测试脚本访问本地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端口,由于配置转发的时候是“8000:localhost:8001”,表示在B机器上会转发到localhost:8001。代码改成:

server.bind(('127.0.0.1', 8001))

再测试显示链接成功。

 

参考:https://blog.csdn.net/nimasike/article/details/73289777

 https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/

https://blog.csdn.net/weixin_41919236/article/details/85015781

远程转发和本地转发原理同样,区别只是在于在哪台主机上进行配置。

有一个缺点是,ssh转发普通用户就能够设定,若是想要取消转发功能,能够修改/etc/ssh/sshd_config,配置“AllowTcpForwarding  no”禁止转发,默认是开启转发。

相关文章
相关标签/搜索