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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a1010256340/article/details/88862446

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

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

三.在另一台服务器上安装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();
            }
        }
    }

}

猜你喜欢

转载自blog.csdn.net/a1010256340/article/details/88862446