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地址地址和对应监听的端口,即可链接到转发的服务器上。