如何用Nginx实现ssh的转发

  • Post author:
  • Post category:其他

如何用Nginx实现ssh的转发

2021-12-03更新内容

大家请注意,之前写的内容可以少了部分内容导致大家走了弯路,在此惭愧的表示一下…
因为让nginx代理TCP、UDP端口转发不能走http模块,所以先确定你的nginx有upstream。验证参数nginx -V |grep with-stream 如果有输出则表示可以使用。然后/etc/nginx/nginx.conf(改成自己的路径)最后添加
include /etc/nginx/tcp.d/*.conf;
然后创建文件夹 sudo mkdir -p /etc/nginx/tcp.d
在随便创建一个.conf结尾的文件,内容见下面就行了
在这里插入图片描述

在windows上安装了vmware,但是公司网络的严格限制,并不能单独给虚拟机一个局域网内的ip,正当无路之际想到了反代理,于是尝试用Nginx,使用stream模块做ssh转发。
说明下环境
1.本机IP是192.168.116.91
2.虚拟机采用了NAT模式,IP是192.168.169.10
3.另外一台同本机IP是同一局域网,IP是192.168.116.68(最后我们ssh尝试是否成功用到)

配置很简单(该配置是192.168.116.91中的nginx):

stream { 
	#stream模块,就跟http模块一样 
	upstream ssh {
		server 192.168.169.10:22;   #这里IP是虚拟机的,对应虚拟机的IP+Port
	}
	server { 
		#里面可以有多个监听服务
		#配置监听端口和代理的ip和端口就可以进行tcp代理了。 
		listen 9922;  #外层通信需要的tcp端口
		proxy_pass ssh;
		proxy_connect_timeout 1h;
		proxy_timeout 1h;
	}
}

接下来用ssh连接尝试

$ ssh -p 9922 root@192.168.116.91
The authenticity of host '[192.168.116.91]:9922 ([192.168.116.91]:9922)' can't be established.
ECDSA key fingerprint is SHA256:WMtgSpx2eyvOjaCuVDcENu3P2p5OchHzR3BXaWZuiSw.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.116.91]:9922' (ECDSA) to the list of known hosts.
root@192.168.116.91's password:
Last login: Mon Jul  8 12:03:51 2019 from 192.168.169.1
[root@master ~]#


版权声明:本文为gaojun6854原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。