我们有一些用于客户机的同步脚本,使用scp将文件发送到由它们的一个提供者管理的远程服务器。最近他们关闭了它,他们提供的新版本不允许scp,只有sftp (没有办法在远程服务器上获得shell,因此scp / rsync无法工作)。
有什么简单的方法可以用sftp代替脚本中的scp?我想我知道的最简单的方法是使用sshfs,使用cp而不是scp,但这很难看。
看起来sftp可以使用-b传递包含命令的文件,但这意味着重新编码脚本的部分。我想知道是否有任何方法可以使用sftp代替scp,或者提供类似功能的其他包?(例如sftp /source user@remote:/dest或诸如此类的东西,如果我可以只使用脚本来替换命令,那就太好了)
谢谢
发布于 2017-03-03 16:08:24
上
编辑:为了明确起见,LFTP客户端支持许多协议,包括FTP、HTTP、FISH、SFTP、HTTPS、FTPS和BitTorrent。在本例中,我们使用的是SFTP。客户端的名字引起了阅读这篇文章的人们的一些困惑。
您可以使用lftp及其镜像子系统复制rsync在SFTP上的行为。这也适用于色度环境。
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并不意味着递归。-R标志意味着推到远程。
--parallel=是要将作业分解为的线程数。当然,MaxStartups在/etc/ssh/sshd_config和nofile中的pam限制和目标服务器上的其他限制可以限制或影响这一点。
net:max-retries 6我喜欢重试,以防发生网络维护。
net:timeout 4放弃,4秒后重试。
如果您不希望更改远程端的perms,请使用--no-perms。
--newer-than只是需要时使用的一个例子。
--loop可用于重复同步,直到未检测到更改为止。
bye我们不想忘记注销,而不是依赖空闲超时。
在LFTP中有还有许多其他选择。
我有很好的经验,使用LFTP使用它的镜像子系统和SFTP.它的速度要快得多,因为它可以将工作分解成多个流。它甚至可以将一个文件分解成多个流。
使用LFTP的一个主要安全优势是允许在不希望自动化脚本在远程端访问shell的环境中进行文件传输。
我创建了一个工作演示,欢迎您进行测试。文件保留率很低,但欢迎您使用它来查看使用lftp + sftp chroot自动推送目录/文件是多么容易。只需安装lftp,然后创建一些临时目录或文件,然后:
mkdir -p ~/sftp_test/`date '+%Y%m%d%H%M'`/{1,2,3}/{a,b,c}
lftp -u anon, -e "set net:timeout 4;set net:max-retries 4;mirror -R --parallel=4 --no-perms ~/sftp_test/ /private/;bye" sftp://ohftp.org发布于 2017-03-03 14:39:11
您可以使用批处理文件近似:
sftp -b batchfile [user@]host批处理文件包括一系列命令,这些命令必须用等效的ftp命令再现"scp“操作:
cd remote_dir
lcd local_dir
put filehttps://serverfault.com/questions/836103
复制相似问题