通过 SFTP/SSH 接收文件并自动转发到另一台服务器上的 FTP

发布于 2024-11-04 13:35:23 字数 445 浏览 1 评论 0原文

我目前的情况是通过 FTP 从客户那里接收平面文件。一些客户坚持需要使用 SSH 私钥 SFTP 而不是常规 FTP。

我想要做的是设置一个 Web 服务器(最好是在 linux/unix 中,但我想我可以在 Windows 服务器上完成并购买 SFTP 服务器软件),该服务器将执行以下操作:

  1. 允许我设置一个 SFTP 目录每个客户端都有唯一的用户/密码。每个目录还必须有公钥/私钥 SSH“东西”,我对此有点陌生,但我已经用 google 搜索过它。

  2. 一旦客户端完全上传文件,我想启动一个事件,通过常规 FTP 将该文件 ftp 到我的 Windows 云。

  3. 这些文件最大可达 10mb,因此在文件完全上传之前,无法启动到其他服务器的 ftp。

有人设置过类似的东西吗?任何指导将不胜感激。

谢谢!

I'm currently in a situation where I receive flat files via FTP from my clients. A couple of clients have insisted on the need to use SSH Private Key SFTP rather than regular FTP.

What I want to do is setup a web server (preferably in linux/unix but I guess I can do it on a windows server and purchase SFTP server software) that will do the following:

  1. Allow me to setup an SFTP directory for each client with unique user/pass. Each directory also has to have the public/private key SSH "stuff" I'm a little new to this but I've googled it.

  2. Once the file is completely uploaded by the client, I want to kick off an event that ftp's that file via regular FTP to my Windows cloud.

  3. These files can be up to 10mb so the even that ftp's to the other server can't fire until the file is completely uploaded.

Has anyone set something like this up? Any guidance would be appreciated.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

朦胧时间 2024-11-11 13:35:23

在Linux中,您可以使用incron来监控目录文件将通过 SFTP 传输并触发您的 ftp 作业。它有点像 cron,只不过它不是根据时间触发作业,而是根据文件系统修改来触发作业。为了仅在写入整个文件后触发,我认为您可以在 inotify 掩码中使用 IN_CLOSE_WRITE 。如果做不到这一点,我建议单独为每个事件配置事件,以将消息回显到日志文件,并查看是否可以识别仅在 SFTP 传输结束时可靠发生的事件。

如果您使用的是 RedHat,则它不在标准发行版中,但在 EPEL 中。

In Linux, you can use incron to monitor the directory the files will be SFTP'd to and have it trigger your ftp job. It's kind of like cron except that instead of triggering jobs based on time, it does so based on filesystem modifications. In order to only trigger once the entire file has been written, I think you can use IN_CLOSE_WRITE in the inotify mask. Failing this, I suggest configuring events for each of the events individually to echo a message to a log file and see if you can identify one which reliably happens only at the end of the SFTP transfer.

If you're using RedHat, it's not in the standard distribution, but it is in EPEL.

她比我温柔 2024-11-11 13:35:23

在 Windows 上,您可以使用 Titan FTP Server Enterprise Edition,它支持 SFTP 并允许您定义各种类型的事件。当事件被触发时,您可以在每个文件夹/每个帐户的基础上启动您需要的任何内容。

附言。 AFAIK,当谈到 SFTP 时,它要么是密码身份验证,要么是公钥身份验证(SSH 密钥),但不能两者兼而有之。

On Windows you could use Titan FTP Server Enterprise Edition, which supports SFTP as well as allows you to define various types of events. When the event is triggered, you could kick off anything you need on a per folder/per account basis.

PS. AFAIK, when it comes to SFTP it is either password authentication or public key authentication (SSH key), but not both.

难得心□动 2024-11-11 13:35:23

在 UNIX 服务器中,您可以将 SSH 配置为使用自定义 sftp 服务器,该服务器不处理 SFTP 协议本身,而是使用密码身份验证打开与 Windows SFTP 服务器的新 SSH 连接,并在那里转发 SFTP 流量。

使用正确的工具编写代理很容易,例如,在 Perl 中使用 Net::OpenSSH 模块:

#!/usr/bin/perl
# this is the sftp-proxy-server

use Net::OpenSSH;
my $ssh = Net::OpenSSH->new($windows_server, $user, $passwd);
$ssh->system({ssh_opts => '-s'}, 'sftp');
$ssh->error and die $ssh->error;

您可以指示 SSH 服务器使用备用 SFTP 服务器,更改 /etc/ssh/sshd_config 中的配置。例如:

Subsystem sftp /usr/local/bin/sftp-proxy-server

In your UNIX server, you can configure SSH to use a custom sftp server that instead of handling SFTP protocol itself, opens a new SSH connection to to the Windows SFTP server using password authentication and forwards the SFTP traffic there.

Writting the proxy is easy with the right tools, for instance, in Perl using the Net::OpenSSH module:

#!/usr/bin/perl
# this is the sftp-proxy-server

use Net::OpenSSH;
my $ssh = Net::OpenSSH->new($windows_server, $user, $passwd);
$ssh->system({ssh_opts => '-s'}, 'sftp');
$ssh->error and die $ssh->error;

You can instruct the SSH server to use that alternative SFTP server changing the configuration in /etc/ssh/sshd_config. For instance:

Subsystem sftp /usr/local/bin/sftp-proxy-server
十级心震 2024-11-11 13:35:23

您尝试过 apache FTP 服务器吗?

我认为您可以使用 ftplet API 完成您需要的操作。

看 :
http://mina.apache.org/ftpserver-project/index.html

Did you try apache FTP Serveur ?

I think you can do what you need with the ftplet API.

see :
http://mina.apache.org/ftpserver-project/index.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文