购买了阿里云多台服务器,其中只有一台服务器,开通了外网,其他服务器没有外网,访问其他服务器的时候,需要先登录有外网的服务器A,然后在服务器A上再通过ssh,访问目标服务器,这样很麻烦。
为了解决这个问题,我们在A服务器上用我们万能的nginx 代理ssh 协议的方式,使得我们客户端电脑可以直接访问目标服务器。
环境准备:A服务器需要安装nginx,其中nginx,是通过 yum 安装的普通nginx,没有增加任何其他模块、依赖、包等。
在nginx的主配置文件中,最下方,所有的{} 以外,增加 一个代码块(和http{}平级)如下:
stream { include /etc/nginx/stream.d/*.conf; }
然后 在/etc/nginx/ 文件夹下,新建 stream.d 文件夹
接下来,在stream.d 文件夹中,创建一个文件,我这里用了协议名和ip做文件名
vim ssh37.conf
下一步的时候,输入文件内容
upstream ssh37 { server 172.19.89.37:22; } server { listen 12201; proxy_pass ssh37; proxy_connect_timeout 1h; proxy_timeout 1h; }
其中 upstream 后的ssh37 是命名,随便取,只要不重复就可以
upstream中 server 后的ip 是局域网服务器的ip,22 是这个服务器的ssh开放端口,如果有修改,对应修改即可
server 下面的 listen 后的 12201 就是客户端最终访问服务器时用的端口(如果是阿里云,需要注意,这个端口需要在安全策略中开通)
proxy_pass 后的ssh37 和upstream 后面的ssh37 一致即可
proxy_connect_timeout 连接时间,根据实际情况修改即可
proxy_timeout 连接时间,根据实际情况修改即可
最后我们保存退出,执行重新加载配置文件即可完成配置
nginx -s reload
接下来我们可以通过客户端进行测试。
ssh 用户名@服务器A的外网ip -p 12201
如果没有问题,即可看到要求输入密码的提示框,输入后即可登录