JoeZhao

跨出界

Hey, I’m JoeZhao, a software engineer, and a gamer.

SFTPGo 安装配置指南

SFTPGo
Full featured and highly configurable SFTP server software
一个全功能和高度可配置的 SFTP 服务器软件

这是 Github 上作者对这个软件的介绍,适用下来也名副其实,符合我的需求。但是因为官网上安装引导文档比较含糊,就记录一下自己折腾的过程。

以下的操作过程均基于一个全新安装的 Ubuntu 18.04.2 LTS (Bionic Beaver) 操作系统,按道理 Debian 适用。

因为我自己只想配置一个独立的 SFTP 服务器,利用 SFTPGo 来协助管理账号,所以没有适用 MySQL / PostreSQL 之类的数据库,而选用了 SQLite 3.x.

版本:0.9.0
版本:0.9.4-dev

安装#

SFTPGo 需要的系统环境#

  1. 需要 Go 1.12 版本以上
  2. 需要一个数据库 (MySQL / PostreSQL / SQLite)
  3. 如果需要运行 cli 测试脚本,还需要 Python 环境和 Request 库。
  4. Git 命令
$ sudo add-apt-repository ppa:longsleep/golang-backports
$ sudo apt update
$ sudo apt install golang-go sqlite3 python3 python3-pip git

SFTPGo 安装#

很简单,只需要执行以下命令:

$ go get -u github.com/drakkan/sftpgo

然后在你的 $GOPATH/bin/ 下找到 sftpgo 命令,如果你不知道你的 $GOPATH 目录,请执行 go env 查看你的环境变量。

这样就算安装完成了,但是具体要使用的话,还需要简单配置一下。

PS:在国内的话,可能会遇到网络不通的情况,我的办法是找一个外部的机器,安装完成后把 ~/go 目录完整打包回来覆盖。

SFTPGo 服务配置#

配置文件#

软链接或者移动 $GOPATH/bin/sftpgo/usr/bin/ 目录,使得系统能够找到 sftpgo 命令,下面是软链的方式:

$ sudo ln -s $GOPATH/bin/sftpgo /usr/bin/sftpgo

接着,创建配置文件夹和添加 SFTPGo 的配置:

$ sudo mkdir -p /etc/sftpgo && cd /etc/sftpgo
$ sudo wget https://raw.githubusercontent.com/drakkan/sftpgo/master/sftpgo.conf

附:sftpgo.conf 文件配置内容

{
  "sftpd": {
    "bind_port": 2022,
    "bind_address": "",
    "idle_timeout": 15,
    "max_auth_tries": 0,
    "umask": "0022",
    "banner": "",
    "upload_mode": 0,
    "actions": {
      "execute_on": [],
      "command": "",
      "http_notification_url": ""
    },
    "keys": [],
    "enable_scp": false,
    "kex_algorithms": [],
    "ciphers": [],
    "macs": [],
    "login_banner_file": "",
    "setstat_mode": 0,
    "enabled_ssh_commands": ["md5sum", "sha1sum", "cd", "pwd"]
  },
  "data_provider": {
    "driver": "sqlite",
    // 你的 sqlite 数据库路径
    "name": "/etc/sftpgo/sftpgo.db",
    "host": "",
    "port": 5432,
    "username": "",
    "password": "",
    "sslmode": 0,
    "connection_string": "",
    "users_table": "users",
    "manage_users": 1,
    "track_quota": 2,
    "pool_size": 0,
    "users_base_dir": "",
    "actions": {
      "execute_on": [],
      "command": "",
      "http_notification_url": ""
    },
    "external_auth_program": "",
    "external_auth_scope": 0
  },
  "httpd": {
    "bind_port": 8080,
    "bind_address": "127.0.0.1",
    // 以下三个配置是 0.9.4 版本新增,提供 web 控制面板
    "templates_path": "/var/www/sftpgo/templates",
    "static_files_path": "/var/www/sftpgo/static",
    "backups_path": "/var/www/sftpgo/backups"
  }
}

web 控制面板配置#

cd ~
git clone git@github.com:drakkan/sftpgo.git
mkdir -p /var/www/sftpgo
cp ~/sftpgo/templates /var/www/sftpgo/
cp ~/sftpgo/static /var/www/sftpgo/
cp ~/sftpgo/backups /var/www/sftpgo/

数据库#

添加数据库文件,可以放在任何地方,我为了方便演示,就一同放在了 /etc/sftpgo 目录下面。

$ 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 wget https://raw.githubusercontent.com/drakkan/sftpgo/master/sql/sqlite/20191230.sql
$ sudo sqlite3 sftpgo.db < 20190706.sql
sqlite> .exit
$ sudo sqlite3 sftpgo.db < 20190728.sql
sqlite> .exit
$ sudo sqlite3 sftpgo.db < 20191230.sql
sqlite> .exit

如果是全新安装的话,直接执行下面的操作就行:

$ cd /etc/sftpgo
$ sudo rm sftpgo.db
$ sudo sqlite3 sftpgo.db
sqlite> CREATE TABLE "users" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "filters" text NULL, "username" varchar(255) NOT NULL UNIQUE, "password" varchar(255) NULL, "public_keys" 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, "expiration_date" bigint NOT NULL, "last_login" bigint NOT NULL, "status" integer NOT NULL);
sqlite> .table
users
sqlite>

这样数据库就算完成了。
注:关于 SQLite 的操作说明请查看:SQLite 教程 | 菜鸟教程

配置 SFTPGo 的 Systemd 服务#

$ 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 内容:

[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=
EnvironmentFile=-/etc/sftpgo/sftpgo.env
ExecStart=/usr/bin/sftpgo serve
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

这里就简单演示一下:

$ 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 下面。

新版本中官方已经提供了简单的操作面板:

本机直接访问:http://127.0.0.1:8080,可以直接在 web 界面进行用户创建删除状态查看等操作。

可以用 SFTP 客户端 FileZilla 测试一下,是否可以正常连接和上传。

—EOF—

其他文档与相关配置说明:

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。