我目前处于从客户端通过FTP接收平面文件的情况。一些客户坚持需要使用SSH私钥SFTP而不是常规FTP。
我想要做的是设置一个Web服务器(最好是linux / unix,但我想我可以在Windows服务器上运行并购买SFTP服务器软件),它将执行以下操作:
允许我为每个具有唯一用户/通道的客户端设置SFTP目录。每个目录还必须有公共/私人密钥SSH“东西”我对此有点新,但我用谷歌搜索了它。
一旦客户端完全上传文件,我想通过常规FTP启动ftp该文件到我的Windows云的事件。
这些文件最多可达10mb,因此在文件完全上传之前,其他服务器的ftp都无法触发。
有没有人设置这样的东西?任何指导都将不胜感激。
谢谢!
答案 0 :(得分:5)
在Linux中,您可以使用incron来监视文件将被SFTP指定的目录,并让它触发您的ftp作业。它有点像cron,除了基于时间触发作业而不是基于文件系统修改。为了只在整个文件写入后触发,我认为你可以在inotify掩码中使用IN_CLOSE_WRITE。如果不这样做,我建议单独为每个事件配置事件,以将消息回显给日志文件,看看是否可以识别仅在SFTP传输结束时可靠发生的事件。
如果您使用的是RedHat,则它不在标准版本中,但它位于EPEL。
答案 1 :(得分:4)
在Windows上,您可以使用Titan FTP Server Enterprise Edition,它支持SFTP,并允许您定义各种类型的事件。触发事件后,您可以按每个文件夹/每个帐户启动所需的任何内容。
PS。 AFAIK,在SFTP方面,它是密码认证或公钥认证(SSH密钥),但不是两者。
答案 2 :(得分:3)
在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
答案 3 :(得分:2)
您是否尝试过apache FTP Serveur?
我认为你可以使用ftplet API做你需要的。