nginx正向代理SFTP整体配置方案

一、概述
目前由于行内网络规划以及安全的原因,不能直接从应用区域直接访问第三方SFTP文件服务器,只能允许代理服务器网络区域出去,也就是SFTP正向代理转发到第三方的SFTP文件服务器,而我们使用的代理应用软件则是开源的nginx。以前搞过正向代理HTTP,而没有尝试过正向代理SFTP,其实也就是TCP协议。为了满足应用需求,我们需要搭建nginx正向代理SFTP服务应用。

二、Nginx编译安装步骤
1、首先,要准备的是软件,可以在网上下载,http://nginx.org/en/download.html,我安装的是nginx1.14.2

参考安装教程

1.https://www.jianshu.com/p/e236985fecd7

2.https://www.jianshu.com/p/5dcd1e027e17

三.在另一台服务器上安装SFTP,服务器IP是 192.168.35.13

四.接着修改配置文件,在/usr/local/nginx/conf目录下,找到nginx.conf配置文件
添加以下内容

新增这个模块:

stream { 
	upstream sftp { 
	hash $remote_addr consistent; 
	server 192.168.35.13:22 max_fails=3 fail_timeout=60s; 
	}
	server { 
		listen 90; #端口可以自己定义
		proxy_connect_timeout 60s; 
		proxy_timeout  30s; 
		proxy_pass sftp; 
	} 
}

PS:这个模块一定要放在http外面

 

五.eclipse导入maven项目,修改配置文件,maven版本(apache-maven-3.5.4.rar)

<dependency>
		    <groupId>com.jcraft</groupId>
		    <artifactId>jsch</artifactId>
		    <version>0.1.42</version>
		</dependency>

六.测试


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Properties;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

public class SftpTest {

	public static void main(String[] args) throws JSchException, FileNotFoundException, SftpException {
		

		int port = 90;
		String password = "sftp";
		String username = "sftp";
		String host = "192.168.35.11";
		 JSch jsch = new JSch();
        Session session = jsch.getSession(username,host, port);
        session.setPassword(password);
        skipHostKeyChecking(session);
        setTimeout(session);
        session.connect();
        ChannelSftp sftp = null;
        Channel channel = session.openChannel("sftp");
        channel.connect();
        sftp = (ChannelSftp) channel;
        sftp.cd("/file");
        File file = new File("D:/aaaa.txt");
        sftp.put(new FileInputStream(file), file.getName());
        disconnect(sftp, session);
	}

	

   /**
     * @param session
     * @throws
     * @Title: skipHostKeyChecking
     * @Description: "StrictHostKeyChecking"如果设为"yes",ssh将不会自动把计算机的密匙加入
     * "$HOME/.ssh/known_hosts"文件,且一旦计算机的密匙发生了变化,就拒绝连接。
     */
    static void skipHostKeyChecking(Session session) {

        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
    }

    static void setTimeout(Session session) throws JSchException {
        session.setTimeout(8000); // 设置timeout时间
    }
    
    static void disconnect(  ChannelSftp  sftp,Session sshSession)
    {
        if (sftp != null)
        {
            if (sftp.isConnected())
            {
                sftp.disconnect();
            }
        }
        if (sshSession != null)
        {
            if (sshSession.isConnected())
            {
                sshSession.disconnect();
            }
        }
    }

}

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
通过Nginx代理SFTP上传文件是一种比较常用的方案,可以提高安全性和灵活性。具体实现步骤如下: 1. 安装OpenSSH和Nginx: ```bash sudo apt-get install openssh-server nginx ``` 2. 配置OpenSSH: 在`/etc/ssh/sshd_config`文件中添加以下内容: ```text # 允许SFTP上传 Subsystem sftp /usr/lib/openssh/sftp-server Match group sftp ChrootDirectory /data/sftp/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no PasswordAuthentication yes ``` 在这里,我们配置SFTP的根目录为`/data/sftp/用户名`,限制了SFTP用户只能使用内置的sftp命令,不能使用ssh登录,同时开启了密码验证。 3. 配置Nginx: 在Nginx配置文件中添加以下内容: ```nginx location /upload { auth_basic "Restricted"; # 开启基本认证 auth_basic_user_file /etc/nginx/.htpasswd; # 认证文件路径 proxy_pass sftp://127.0.0.1:22/; # 代理到本地的SFTP服务 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 配置上传文件大小限制 client_max_body_size 50M; } ``` 在这里,我们通过`proxy_pass`指定了SFTP上传的目标地址为本地的SFTP服务,同时开启了基本认证,并设置了上传文件的大小限制。 4. 创建SFTP用户和认证文件: ```bash sudo adduser sftpuser # 创建SFTP用户 sudo mkdir -p /data/sftp/sftpuser/upload # 创建上传目录 sudo chown sftpuser:sftp /data/sftp/sftpuser/upload # 设置目录权限 sudo htpasswd -c /etc/nginx/.htpasswd sftpuser # 创建认证文件 ``` 在这里,我们创建了一个名为`sftpuser`的SFTP用户,并创建了一个上传目录,设置了目录权限,并创建了一个认证文件。 通过以上步骤,我们就可以通过Nginx代理SFTP上传文件了。用户可以通过SFTP客户端连接到Nginx,并上传文件到指定的上传目录。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构师之路魂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值