通过代理连接sftp

1.问题描述

问题是这样的。我们现在需要在微服务所在内网的A机器连接到外网的sftp,但是网络又不能直接到达。然后A机器到B机器是通过的,B机器到sftp的网络是通的,所以我们需要借助B机器进行转发。

在这里插入图片描述

2.代码实现

我们的代码是通过java的JSch实现的,下面给出简易实现

import com.jcraft.jsch.*;

class SFTPThroughTunnelExample {
    public static void main(String[] args) {
    	// 这个ip为B机器所在ip
        String host = "100.100.932.267";
        // 这个端口为B机器nginx所监听的端口
        int port = 66;
        String user = "sftp_user";
        String password = "sftp_passward";
        String remoteFilePath = "/path/to/remote/file.txt";
        String localFilePath = "/path/to/local/file.txt";

        try {
            JSch jsch = new JSch();
            Session session = jsch.getSession(user, host, port);
            session.setPassword(password);
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();

            ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
            channelSftp.connect();
            System.out.println("连接上了");
            // 下载文件
            channelSftp.get(remoteFilePath, localFilePath);
            System.out.println("File downloaded successfully.");
            // 关闭连接
            channelSftp.exit();
            session.disconnect();
        } catch (JSchException | SftpException e) {
            e.printStackTrace();
        }
    }
}

3.nginx配置

B机器的nginx配置如下:

3.1 创建sftp.stream文件

我的nginx部署路径在

 /usr/local/nginx/

文件所处路径为

/usr/local/nginx/conf/myconf/sftp.stream
server {
        listen 66;
        # 这里的ip为sftp机器真正的ip
        proxy_pass 471.121.194.34:667;
        proxy_connect_timeout 30s;
        proxy_timeout  24h;
}

3.2 修改nginx配置

nginx.conf 的路径在

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

修改nginx.conf,在最下面的位置新增如下内容

stream{
	include myconf/*.stream;	
}

4.重启nginx生效

cd /usr/local/nginx/sbin/
service nginx restart

重启之后运行java代码,即可以实现通过代理连接sftp

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过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,并上传文件到指定的上传目录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值