用sftpreplacescp

我们有一些同步脚本用于客户端使用scp将文件发送到由其中一个提供者pipe理的远程服务器。 最近他们closures了,他们提供的新的不允许scp,只有sftp(没有办法在远程服务器上获得一个shell,所以scp / rsync不能工作)。

是否有一个简单的方法来replace脚本中的SFTP SFTP? 我想最简单的我知道将使用sshfs和使用cp而不是scp,但是这是非常丑陋的。

看起来sftp可以使用-b传递一个带有命令的文件,但是这意味着要对脚本的一部分进行重新编码。 我想知道是否有任何方法使用sftp作为替代scp或其他一些提供类似function的包? (即sftp /源用户@远程:/ dest或类似的东西,这将是完美的,如果我只能sed脚本来replace只命令)

谢谢

通过sftp的Rsync或chroot sftp

编辑:要清楚, LFTP客户端支持许多协议,包括FTP,HTTP,FISH,SFTP,HTTPS,FTPS和BitTorrent。 在这个例子中,我们使用SFTP 。 客户的名字已经引起了一些人读这个postconfuion。

您可以使用lftp ,它是镜像子系统,通过SFTP复制rsync的行为。 这也适用于chroot环境。

 lftp -u username, \ -e "set net:timeout 4;set net:max-retries 6;mirror -R --parallel=8 --no-perms --newer-than=now-2days --only-newer /source/ /source/;bye" sftp://hostname.domain 

在这个例子中,我忘了密码,因为我们有一个SSH密钥信任的目标主机。

注意: -R不意味着recursion。 -R标志表示推送到远程。

--parallel=是打破作业的线程数。 当然可以通过/etc/ssh/sshd_config的MaxStartups以及目标服务器上的nofile pam限制和其他限制限制或影响。

net:max-retries 6我喜欢重试,以防万一有networking维护。

net:timeout 4放弃,然后在4秒后重试。

--no-perms如果您不希望更改远程端--no-perms则不要烫发。

--newer-than不仅仅是一个需要使用的东西的例子。

--loop可用于重复同步,直到没有检测到更改。

bye我们不想忘记退出,而不是依靠空闲超时。

LFTP还有许多其他的select 。

我使用镜像子系统和SFTP对LFTP有很好的经验。 它要快得多,因为它可以把工作分解成多个stream。 它甚至可以将单个文件分解成多个stream。

使用LFTP的主要安全优势是允许在不希望自动化脚本访问远程端的shell的环境中进行文件传输。

你可以使用batch fileaproximation:

 sftp -b batchfile [user@]host 

一个batch file包括一系列命令,它们必须用等效的ftp命令重现“scp”操作:

 binary cd remote_dir lcd local_dir put file