SFTPGo
是一个全功能和高度可配置的 SFTP
服务器软件,这是 Github
上作者对这个软件的介绍。
Full featured and highly configurable SFTP server software
项目地址:https://github.com/drakkan/sftpgo
整体使用下来也名副其实,符合我的需求。但是因为官网上安装引导文档比较含糊,就记录一下自己折腾的过程。
以下的操作过程均基于一个全新安装的 Ubuntu 18.04.2 LTS (Bionic Beaver)
操作系统,按道理 Debian
也适用。
因为我自己只想配置一个独立的 SFTP
服务器,利用 SFTPGo
来协助管理账号,所以没有使用 MySQL
/ PostreSQL
之类的数据库,而选用了 SQLite 3.x
.
安装 SFTPGo
SFTPGo 需要的系统环境
需要 Go 1.12
版本以上
需要一个数据库 ( MySQL
/ PostreSQL
/ SQLite
)
如果需要运行 Cli
测试脚本,还需要 Python
环境和 Request
库。
Git
命令
安装相关环境依赖
1 2 3 $ sudo add-apt-repository ppa:longsleep/golang-backports $ sudo apt update $ sudo apt install golang-go sqlite3 python3 python3-pip git
安装 SFTPGo
很简单,只需要执行以下命令:
1 $ go get -u github.com/drakkan/sftpgo
然后在你的 $GOPATH/bin/
下找到 sftpgo
命令,如果你不知道你的 $GOPATH
目录,请执行 go env
查看你的环境变量。
这样就算安装完成了,但是具体要使用的话,还需要简单配置一下。
配置 SFTPGo
创建配置文件
首先,软链接或者移动 $GOPATH/bin/sftpgo
到 /usr/bin/
目录,使得系统能够找到 sftpgo
命令,下面是软链的方式:
1 $ sudo ln -s $GOPATH/bin/sftpgo /usr/bin/sftpgo
接着,创建配置文件夹和添加 SFTPGo
的配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 $ sudo mkdir -p /etc/sftpgo && cd /etc/sftpgo $ sudo wget https://raw.githubusercontent.com/drakkan/sftpgo/master/sftpgo.conf # sftpgo.conf 文件配置内容 $ cat /etc/sftpgo/sftpgo.conf { "sftpd": { "bind_port": 2022, "bind_address": "", "idle_timeout": 15, "max_auth_tries": 0, "umask": "0022", "banner": "SFTPGo", "upload_mode": 0, "actions": { "execute_on": [], "command": "", "http_notification_url": "" }, "keys": [] }, "data_provider": { "driver": "sqlite", "name": "sftpgo.db", "host": "", "port": 5432, "username": "", "password": "", "sslmode": 0, "connection_string": "", "users_table": "users", "manage_users": 1, "track_quota": 2 }, "httpd": { "bind_port": 8080, "bind_address": "127.0.0.1" } }
创建 SFTPGo 相关数据库
下载数据库文件并导入数据库,数据库文件可以放在任何地方。我为了方便演示,就一同放在了 /etc/sftpgo
目录下面。
1 2 3 4 5 6 7 $ cd /etc/sftpgo $ sudo wget https://raw.githubusercontent.com/drakkan/sftpgo/master/sql/sqlite/20190706.sql $ sudo wget https://raw.githubusercontent.com/drakkan/sftpgo/master/sql/sqlite/20190728.sql $ sudo sqlite3 sftpgo.db < 20190706.sql sqlite> .exit $ sudo sqlite3 sftpgo.db < 20190728.sql sqlite> .exit
但是我在直接使用迁移文件的时候报错了,貌似是不支持某个操作。
所以我直接合并了两条 SQL
语句,直接在库里面执行了。操作过程如下:(如果上面的操作出错了再尝试执行下面的,正常跳过这一步)
1 2 3 4 5 6 7 $ cd /etc/sftpgo $ sudo rm sftpgo.db $ sudo sqlite3 sftpgo.db sqlite> CREATE TABLE "users" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "username" varchar(255) NOT NULL UNIQUE, "password" varchar(255) NULL, "public_key" text NULL, "home_dir" varchar(255) NOT NULL, "uid" integer NOT NULL, "gid" integer NOT NULL, "max_sessions" integer NOT NULL, "quota_size" bigint NOT NULL, "quota_files" integer NOT NULL, "permissions" text NOT NULL, "used_quota_size" bigint NOT NULL, "used_quota_files" integer NOT NULL, "last_quota_update" bigint NOT NULL, "upload_bandwidth" integer NOT NULL, "download_bandwidth" integer NOT NULL); sqlite> .table users sqlite>
这样数据库就算创建完成了。
注:关于 SQLite
的操作说明请查看 SQLite 教程: https://www.runoob.com/sqlite/sqlite-tutorial.html
配置 SFTPGo 的 Systemd 服务
1 2 3 4 5 6 $ cd /etc/systemd/system $ sudo wget https://raw.githubusercontent.com/drakkan/sftpgo/master/init/sftpgo.service $ sudo systemctl daemon-reload $ sudo systemctl enable sftpgo.service $ sudo systemctl start sftpgo.service $ sudo systemctl status sftpgo.service
上面的步骤操作完后,你就可以看到 sftpgo.service
的运行状态了。以下为 sftpgo.service
内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $ cat /etc/systemd/system/sftpgo.service [Unit] Description=SFTPGo sftp server After=network.target [Service] User=root Group=root Type=simple WorkingDirectory=/etc/sftpgo Environment=SFTPGO_CONFIG_DIR=/etc/sftpgo/ Environment=SFTPGO_LOG_FILE_PATH=/var/log/sftpgo.log EnvironmentFile=-/etc/sftpgo/sftpgo.env ExecStart=/usr/bin/sftpgo KillMode=mixed Restart=always RestartSec=10s [Install] WantedBy=multi-user.target
到这里,我们的 SFTPGo
软件就已经运行起来了,并且开启了一个 127.0.0.1:8080
的服务,我们可以通过它提供的 REST API
来进行 SFTP
的用户管理工作。
注:因为安全的原因,这个服务只允许内网访问,如果想开放到外网,请自行搭建 Nginx
/ Caddy
等反向代理工具代理一下就行。
使用 SFTPGo REST API
官方暂时没有提供管理操作面板,只提供了一个简单的基于 Python
的 Cli
工具 sftpgo_api_cli
,这里就简单演示一下:
1 2 3 4 5 6 $ cd ~ $ sudo mkdir -p /data/sftp/ $ wget https://github.com/drakkan/sftpgo/raw/master/scripts/sftpgo_api_cli.py $ pip3 install requests $ python3 sftpgo_api_cli.py add_user test_username --password "test_pwd" --home_dir="/data/sftp/test_username" --uid 33 --gid 1000 --max_sessions 2 --quota_size 0 --quota_files 0 --permissions * --upload_bandwidth 100 --download_bandwidth 60 $ python3 sftpgo_api_cli.py get_users
上面操作完成后,就简单创建了一个名为 test_username
的用户 ,并且把目录限制在 /data/sftp/test_username
下面。然后你可以用 SFTP
客户端 FileZilla
来测试一下,是否可以正常连接和上传。
更多详细的相关说明可以看官方 sftpgo_api_cli 使用文档:https://github.com/drakkan/sftpgo/tree/master/scripts
其他文档与相关配置说明
SFTPGo
REST API CLI client
来源:跨出界
原文:https://tinyurl.com/yxsebcv5
题图:来自谷歌图片搜索
版权:本文版权归原作者所有
投稿:欢迎投稿,邮箱: editor@hi-linux.com