用于将本地目录树克隆/同步到SFTP服务器的工具。
sftpclone的Python项目详细描述
sftpclone
用于将本地目录树克隆/同步到SFTP服务器的工具。
功能
- 使本地目录树与SFTP服务器的指定文件夹保持同步。
- 根据需要更新符号链接并保持文件的一致性
- SFTP服务器上的自动平铺扩展/处理。
- 公钥身份验证。
ssh配置
条目兼容性。- 同步排除模式。
- 与Python2和Python3兼容。
安装
您可以使用pip:
$ 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
其中,对于每个命令行参数:
- 本地路径:本地文件夹的路径。此路径必须存在,并且可以包含
~
(我们使用颚化符扩展)。 - sftp url:它指定具有以下格式的远程sftp url:
[用户[:密码]@]主机名:远程路径
。密码和用户字段都可以省略。如果省略前者,则应指定私钥标识文件。如果省略后者,则自动使用当前用户。主机名可以引用ssh_config
文件的一个元素。如果远程路径包含~
,则它将扩展到用户开始SFTP会话的默认文件夹。 - [h]elp:显示帮助消息并退出。
- 私有-[k]密钥路径:指向您的私有标识文件的路径。如果不使用密码身份验证,请进行设置。它自动默认为
~/.ssh/id_rsa
并且可以多次使用。 - [l]ogging:设置日志级别(默认为错误)。
- [p]ort:ssh远程端口(默认为22)。
- [f]ix符号链接:如果有指向同步目录的绝对符号链接,则它们在远程服务器上保持一致:即,它们将具有反映服务器上克隆目录路径的绝对路径。适用于群集配置。
- ssh-[a]gent:启用ssh代理支持。任何private-[k]ey path参数都将被忽略。
- ssh-[c]onfig path:在sftp url的主机名中,您可以指定您的
ssh配置文件的条目。如果您使用的是非标准路径,可以在此处设置。
- k[n]own庠hosts path:指向您的
known庠hosts
文件的路径。默认为~/.ssh/known_hosts
- [d]禁用已知主机:禁用远程指纹检查本地
已知主机
文件。 - [e]从文件路径中排除:指向包含模式列表的文件的路径。与这些模式匹配的每个文件都将被忽略(未同步)。
- 不要删除[t]e:不要删除本地目录中丢失的远程文件。
- 所有[o]w-未知:在连接到未知主机之前不要要求确认。
警告:请确保选择一个适当的远程文件夹。
同步过程确实会删除本地文件夹中不存在的任何文件(除非打开-t
选项)。
ssh配置
兼容性
sftp url参数中的主机名可以是ssh_config
文件中的有效项。具体来说,您的条目应该具有相关参数,如:
主机名
用户
端口
标识文件
代理命令
任何未找到的值都将回退到cli参数。
无论如何,您必须设置的identityfile
字段,否则身份验证将尝试退回到~/.ssh/id_rsa
并且无法工作。
选择与模式匹配的第一个主机名(以ssh\u config
方式)。
已知主机
检查
默认情况下,sftpclone会将远程主机指纹与~/.ssh/known_hosts
文件中包含的指纹匹配。
如果您的计算机上不存在此文件,则可以使用-n
选项指定其他路径。
此外,您可以使用-d
标志禁用检查。
未知主机将要求用户授权连接。请注意,即使在授权之后,已知主机
不会修改文件。
排除列表
它的灵感来自rsync/tar--从
标志中排除。
可以在命令行参数中指定包含模式列表的文件,每行一个。 所有匹配任何模式的文件都不会与SFTP服务器同步。
以;
或开头的行将被忽略。
每个模式都被认为是相对于同步目录的。因此,前导/
被忽略。
示例
; This will exclude any file or directory beginning with foofoo*; This will exclude any file foo in a subdir of the directory bar.bar/*/foo
编程用法
测试
此项目使用nose进行测试。
此外,在python 2上,您还需要mock
模块(3.3版python标准库的一部分)。
在这两种情况下,您都可以使用以下命令安装测试要求:
$ pip install -r test_requirements.txt
然后,您可以使用从项目根目录启动测试套件:
$ nosetests $ python setup.py test# alternatively