跳转到主要内容

用于克隆/同步本地目录树与SFTP服务器的工具。

项目描述

sftpclone

PyPI version PyPI python version PyPI license

用于克隆/同步本地目录树与SFTP服务器的工具。

功能

  • 保持本地目录树与SFTP服务器指定文件夹的同步。
  • 需要时更新符号链接,并保持文件 一致性
  • SFTP服务器上的自动波浪号展开/处理。
  • 公钥认证。
  • ssh_config 条目兼容性。
  • 同步排除模式。
  • 兼容Python 2和Python 3。

安装

您可以使用pip安装sftpclone。

$ pip install sftpclone --user

注意:有时在用户模式下构建所需依赖项不起作用。在这种情况下,您需要使用 sudo 并移除 --user 标志。或者,您可以使用virtualenv。

或者,您可以克隆此存储库,然后启动

$ git clone https://github.com/unbit/sftpclone
$ cd sftpclone
$ python setup.py install

在这两种情况下,您都会在您的路径中找到sftpclone脚本。

使用方法

usage: sftpclone [-h] [-k private-key-path]
                 [-l {CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET}] [-p PORT]
                 [-f] [-a] [-c ssh config path] [-n known_hosts path] [-d]
                 [-e exclude-from-file-path] [-t] [-o]
                 local-path user[:password]@hostname:remote-path

其中,对于每个命令行参数

  • local-path:本地文件夹的路径。此路径必须存在,并且可以包含 ~(我们使用波浪号展开)。
  • 远程SFTP URL:指定远程SFTP URL的格式为:[用户[:密码]@]主机名:远程路径。密码和用户字段都可以省略。如果您省略了前者,则应指定一个私钥身份文件。如果您省略了后者,则默认使用当前用户。主机名可以引用您的ssh_config文件中的一个元素。如果远程路径包含~,则它将被展开到用户开始SFTP会话的默认文件夹。
  • [h]elp:显示帮助信息并退出。
  • private-[k]ey-path:您的私钥身份文件的路径。如果您不使用密码认证,请设置它。它自动默认为~/.ssh/id_rsa,并且可以多次使用。
  • [l]ogging:设置日志级别(默认为ERROR)。
  • [p]ort:SSH远程端口(默认为22)。
  • [f]ix-symlinks:如果您有指向同步目录的绝对符号链接,它们将在远程服务器上保持一致:即,它们将具有反映服务器上克隆目录路径的绝对路径。这对于集群配置很有用。
  • ssh-[a]gent:启用ssh-agent支持。任何private-[k]ey-path参数都将被忽略。
  • ssh-[c]onfig-path:在sftp-url的主机名中,您可以指定您的ssh_config文件中的一个条目。如果您使用非标准路径,您可以在其中设置它。
  • known_hosts路径:您的known_hosts文件的路径。默认为~/.ssh/known_hosts
  • [d]isable-known-hosts:禁用对本地known_host文件的远程指纹检查。
  • [e]xclude-from-file-path:包含模式列表的文件的路径。与这些模式匹配的任何文件都将被忽略(不会同步)。
  • do-not-dele[t]e:不要删除本地目录中缺失的远程文件。
  • all[o]w-unknown:在连接到未知主机之前不要请求确认。

注意:请务必选择一个合适的远程文件夹。同步过程确实会删除本地文件夹中不存在的任何文件(除非您打开了-t选项)。

ssh_config兼容性

sftp-url参数中的主机名可以是ssh_config文件中的一个有效条目。具体来说,您的条目应包含相关参数,如

  • HostName
  • User
  • Port
  • IdentityFile
  • ProxyCommand

找不到的任何值将回退到CLI参数。无论如何,您必须设置IdentityFile字段,否则认证将尝试回退到~/.ssh/id_rsa并且可能无法工作。将选择与模式匹配的第一个主机名(按ssh_config的方式)。

known_hosts检查

默认情况下,sftpclone将匹配远程主机指纹与您~/.ssh/known_hosts文件中的指纹进行比较。如果您的机器上没有此文件,您可以使用-n选项指定不同的路径。此外,您可以使用-d标志禁用检查。未知主机将要求用户授权连接。请注意,即使在授权之后,known_host文件也不会被修改。

排除列表

它从rsync/tar --exclude-from标志中汲取灵感。

您可以在命令行参数中指定一个包含模式列表的文件,每行一个。所有与这些模式匹配的文件都不会与SFTP服务器同步。

;#开头的行将被忽略。

每个模式都被认为是相对于同步目录的。因此,前面的/将被忽略。

示例

; This will exclude any file or directory beginning with foo
foo*
; This will exclude any file foo in a subdir of the directory bar.
bar/*/foo

程序化使用

您可以在示例目录中找到一些程序化使用的示例。

测试

本项目使用nose进行测试。此外,在Python 2中,您需要mock模块(Python 3.3标准库的一部分)。在这两种情况下,您可以使用以下命令安装测试需求:

$ pip install -r test_requirements.txt

然后,您可以从项目根目录使用以下命令启动测试套件

$ nosetests
$ python setup.py test # alternatively

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

sftpclone-1.2.2.tar.gz (22.9 kB 查看哈希值)

上传时间 源代码

构建分发

sftpclone-1.2.2-py2.py3-none-any.whl (20.2 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下组织支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面