与Synology NAS设备交互的PythonAPI包装器和工具集。

synotools的Python项目详细描述


license:gpl v3生成状态覆盖状态代码样式:黑色

synotools

python api包装器和工具集,用于使用diskstation manager(dsm)与概要nas设备交互。存储库提供了两种不同的工具集来与NAS通信:

  • api:通过python包装简化dsm查询。
  • 命令系统:通过设备中托管的sh脚本,但从任何能够运行fabric和python的unix系统调用。

API需要下面一节中描述的有效凭据。

开始

使用pip安装软件包:

python -m pip install synotools

~/.synotools/credentials中创建凭据文件

# Device access credentials
SYNOLOGY_IP=your-ip
SYNOLOGY_PORT=your-port
SYNOLOGY_USERNAME=your-username
SYNOLOGY_PASSWORD=your-password

# Deluge service credentials
DELUGE_IP=deluge-ip
DELUGE_PORT=deluge-port
DELUGE_USERNAME=deluge-username
DELUGE_PASSWORD=deluge-password

# VPN settings
VPN_ID=vpn-config-id
VPN_NAME=vpn-config-name
VPN_PROTOCOL=vpn-protocol

可以在env.sample上找到所有字段的列表,此文件可以用作凭据的模板。一旦填充并完成设置后,您将能够运行命令:

python <installation-folder>/commands/<command-name> <args>

有关可用命令的更多信息,请阅读使用工具部分!

设置

凭证

有效凭据应存储在本地,允许工具通过本地网络连接到设备。在凭证文件中填写以下凭证:

  1. IP:例如192.168.1.35
  2. 端口:5000用于http,或5001用于https
  3. 用户名:与通常用于通过Web界面登录的用户名相同
  4. 密码:对应密码

找出您的本地IP将取决于您的操作系统、路由器配置和其他因素。有关如何获取或设置设备IP的详细信息,请参阅DSM的用户指南。强烈建议为您的NAS设置一个静态IP,以便命令和ssh访问能够可靠地工作,而无需更新IP。

注意:出于安全原因,请记住不要共享您的个人凭据文件或密码!不要提交到存储库,也不要与任何人共享。该文件应该是私有的,并安全地存储在本地。

ssh密钥

synotools使用fabric(内置于paramiko之上)来处理ssh连接。对凭据配置和ssh密钥进行了某些假设。建议在默认so的ssh位置设置ssh密钥。尽管本指南主要关注于伊苏,可以帮忙。请确保将私钥存储在默认位置(对于UNIX系统,~/.ssh),并记下公钥内容或位置,因为下一步将需要它。

启用NAS ssh访问

默认情况下,在设备中禁用终端访问。按照官方支持中的说明启用它

然后,需要将公钥添加到设备中的授权密钥,并设置正确的权限。这本方便的指南可能会有所帮助。

在NAS中安装雨淋

download命令远程使用druge,因此必须在尝试之前安装并配置它。

1-下载并安装synocomunity。 2-Deluge的身份验证配置必须包含用于远程连接的用户、密码和权限级别。 3-洪水服务器的主机IP和端口。默认值分别为127.0.0.158846。 4-设置好这些变量后,将它们复制到凭证文件中的相关字段。

为了设置洪水,您可以:

a)使用雨淋的默认用户名:雨淋和密码雨淋,或 b)创建您自己的用户,如这里所述

注意:如果要创建用户,则NAS中的文件夹可能与上述指南不同,具体取决于您的系统。身份验证文件可能位于/var/packages/deluge/target/var中,例如。

VPN客户端配置

NAS可以通过VPN网络接口进行连接,需要先设置VPN网络接口。本文档解释了该过程。一旦vpn配置文件设置并至少使用一次,就可以从配置中检索vpn配置并将其复制到凭据文件中。这些详细信息可从vpnc_last_connect获取,如此处解释

使用工具

这些工具中当前包含的大多数命令都是sh脚本,预期将托管在nas中,其中sh或python脚本将在本地运行。尽管大多数脚本都可以直接从python运行,但是已经添加了许多.docker脚本,这样任何东西都可以在一个命令中运行。

NAS脚本安装

在尝试运行任何其他脚本之前,此步骤是必需的,因为它们依赖于先安装的脚本!

./install.docker <your-ssh-key-name>

# e.g. ./install.docker paulo_rsa

synotools/scripts中收集所有脚本,调整它们的大小并将它们部署到nas~/.scripts文件夹中。用户来自凭证文件。无需附加身份验证即可连接到NAS。

注意:将ssh密钥添加到dockerinstallimage意味着出于安全原因,此映像不应公开共享(即推送到docker repo)。

下载Torrent

将Torrent添加到NAS中的"洪水",将其下载到默认下载文件夹。

pythonsynotools/command/download.py"<your-torrent>"# e.g python synotools/commands/download.py "https://torrents.linuxmint.com/torrents/linuxmint-17-cinnamon-32bit-v2.iso.torrent"# e.g python synotools/commands/download.py "magnet:?xt=urn:btih:336165b4134e3754fa6996d881a7e7b55a40eb68&dn=archlinux-2019.06.01-x86_64.iso&tr=udp://tracker.archlinux.org:6969&tr=http://tracker.archlinux.org:6969/announce"

连接到VPN

检查NAS是否通过VPN连接,如果没有,请连接。

pythonsynotools/commands/vpn_connect.py

兼容性

使用Synology的DS218J模型进行测试。

开发

这个软件是在linux mint中创建和维护的,但是开发人员应该能够使用几乎任何unix平台做出贡献。在开始之前,需要安装和配置以下工具:

  • 码头工人
  • < G >它

依赖关系

有两种依赖关系:

  • python包:通过pip3自动处理。它们包含在需求文件中,对于工具本身,requirements.txt,对于所有外围开发工具,requirements-dev.txt
  • 其他依赖项:为了防止开发人员的系统混乱,所有不能与包管理器一起安装的外部依赖项都应该位于dependencies文件夹中。提供脚本以自动安装这些程序。

开发环境设置

1-在您选择的位置克隆基本存储库。

git clone git@github.com:DazEdword/synology-toolset.git

2-配置凭据文件和ssh密钥,如入门部分中所述

3-确保所有脚本都是可执行的。

cd </path/to/project/root>
find . -type f -iname "*.sh" -exec chmod +x {} \;
find docker/scripts/ -type f -exec chmod +x {} \;

运行测试

已经设置了几个docker脚本来明确运行测试的子集,同时处理所有必需的依赖项。使用这些脚本Docker应该为您处理一切:

# Unit tests
./tests.docker
python -m pip install synotools
0
python -m pip install synotools
1

或者,可以创建一个虚拟环境,并通过脚本安装所有依赖项,从而允许更丰富的测试运行,如pytest的文档中所述。

注意:集成测试可能需要您的NAS处于打开状态并在本地网络中可用才能通过,因为测试可以直接与其交互。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Hibernate:合并并删除,而不是从数据库中删除实体对象   java如何在WebFilter中有条件地从Mono返回?   java调用mysql c3p0函数   可执行jar Java jar文件加载错误:无法找到或加载主类。类导致的错误:java。lang.ClassNotFoundException:某些东西。班   java如何减少/更改爬网后的延迟?   从其他语言(如Java、PHP、Perl、Python等)调用C/C++代码的最佳方式是什么?   java如何模拟影响对象的void返回方法   当我试图在ubuntu上启动JavaScala时,它抛出了一个异常   java如何正确输出游戏   理解java和C++背景下的JavaScript原型   oracle如何将Java函数转换为postgresql函数   多线程为什么我的java服务器程序在超时后不退出?   java如何使listView中的按钮在单击时工作?   试图将这个嵌套的java forloop转换为python,但我不知道如何转换。有没有一种方法可以像这样为循环执行if语句?   java幂函数在计算器中的应用   如何在java中滚动浏览mysql数据库   在Spring Boot应用程序的JUnit测试中,java没有符合自动连线JPA存储库要求的bean   java如何使用扩展类的JPanel对象?