nginx转发sftp请求,ssh远程登录

1,139 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1.背景 公司内部为了加强服务器网络的权限管控,对某些网端进行了登录限制,也就是说,即使你有服务器的账号密码,但是想要远程登录到服务器也是没有权限的。 有些权限控制了太死,感觉是为了限制而限制,比如开发人员需要获取测试服务器上的系统日志,也不允许开放权限,导致解决问题的效率大大下降。 和运维人员沟通无效,之能自己找路子。 2.nginx配置代理sftp请求 根据我描述的背景,本地环境与目标环境的网络无法通信,需要存在一台中间服务器,它与本地环境和目标服务器均能通信。类似一个中转站,帮我们拐了一个弯。 在这里插入图片描述

在这个中转站安装一个nginx,安装编译必要的模块,通过监听不同的端口,管理转发至不同的服务器上。

下载nginx包

wget http://nginx.org/download/nginx-1.12.2.tar.gz

解压

tar -zxvf nginx-1.12.2.tar.gz

编译nginx模块

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-stream --with-stream_ssl_module

编译

make

安装模块

make install

编辑配置文件

vi  /usr/local/nginx/conf/nginx.conf

加入以下stream配置项内容

events {
    worker_connections  1024;
}
stream {
    upstream sftp {
    hash $remote_addr consistent;
    server 192.168.xxx.xx:22 max_fails=3 fail_timeout=60s;
    }
    server {
        listen 90; #端口可以自己定义
        proxy_connect_timeout 60s;
        proxy_timeout  300s;
        proxy_pass sftp;
    }
}
http {
  ...
}

配置说明: 1.nginx默认是不能代码sftp请求的,需要加载对应的模块,否则会提示无法支持相应配置。 2.示例中配置的是监听90端口,当90端口收到请求,会转发给对应的服务器地址的22端口。 3.若需要配置多个转发路由,增加多个upstream与server即可。

检查nginx配置是否正确

/usr/local/nginx/sbin/nginx -t

动态加载nginx配置,未启动无需手动加载

/usr/local/nginx/sbin/nginx -s reload

启动nginx

/usr/local/nginx/sbin/nginx

这样配置就完成了,使用sftp工具链接nginx地址地址和对应监听的端口,即可链接到转发的服务器上。