SFTPGo
全功能和高度可配置的 SFTP 伺服器軟體
A full-featured and highly configurable SFTP server software
這是 Github 上作者對這個軟體的介紹,適用下來也名副其實,符合我的需求。但是因為官網上安裝引導文檔比較含糊,就記錄一下自己折騰的過程。
以下的操作過程均基於一個全新安裝的 Ubuntu 18.04.2 LTS (Bionic Beaver) 操作系統,按道理 Debian 適用。
因為我自己只想配置一個獨立的 SFTP 伺服器,利用 SFTPGo 來協助管理帳號,所以沒有適用 MySQL / PostreSQL 之類的資料庫,而選用了 SQLite 3.x.
版本:0.9.0
版本:0.9.4-dev
安裝#
SFTPGo 需要的系統環境#
- 需要 Go 1.12 版本以上
- 需要一個資料庫 (MySQL / PostreSQL / SQLite)
- 如果需要運行 cli 測試腳本,還需要 Python 環境和 Request 庫。
- 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—
其他文檔與相關配置說明: