SFTPGo 是一個(gè)全功能和高度可配置的 SFTP 山東服務(wù)器軟件,F(xiàn)ull featured and highly configurable SFTP server software
以下的操作過(guò)程均基于一個(gè)全新安裝的 Ubuntu 18.04.2 LTS (Bionic Beaver) 操作系統(tǒng),按道理 Debian 也適用。
利用 SFTPGo 來(lái)協(xié)助管理賬號(hào),所以沒(méi)有使用 MySQL / PostreSQL 之類的數(shù)據(jù)庫(kù),而選用了 SQLite 3.x.
安裝 SFTPGoSFTPGo 需要的系統(tǒng)環(huán)境
需要 Go 1.12 版本以上 需要一個(gè)數(shù)據(jù)庫(kù) ( MySQL / PostreSQL / SQLite ) 如果需要運(yùn)行 Cli 測(cè)試腳本,還需要 Python 環(huán)境和 Request 庫(kù)。 Git 命令 安裝相關(guān)環(huán)境依賴 $ sudo add-apt-repository ppa:longsleep/golang-backports $ sudo apt update $ sudo apt install golang-go sqlite3 python3 python3-pip git
安裝 SFTPGo
很簡(jiǎn)單,只需要執(zhí)行以下命令:
$ go get -u XXX.com/drakkan/sftpgo
然后在你的 $GOPATH/bin/ 下找到 sftpgo 命令,如果你不知道你的 $GOPATH 目錄,請(qǐng)執(zhí)行 go env 查看你的環(huán)境變量。
這樣就算安裝完成了,但是具體要使用的話,還需要簡(jiǎn)單配置一下。
配置 SFTPGo創(chuàng)建配置文件
首先,軟鏈接或者移動(dòng) $GOPATH/bin/sftpgo 到 /usr/bin/ 目錄,使得系統(tǒng)能夠找到 sftpgo 命令,下面是軟鏈的方式:
$ sudo ln -s $GOPATH/bin/sftpgo /usr/bin/sftpgo
接著,創(chuàng)建配置文件夾和添加 SFTPGo 的配置:
$ sudo mkdir -p /etc/sftpgo && cd /etc/sftpgo $ sudo wget https://raw.XXXusercontent.com/drakkan/sftpgo/master/sftpgo.conf # sftpgo.conf 文件配置內(nèi)容 $ 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" } }
創(chuàng)建 SFTPGo 相關(guān)數(shù)據(jù)庫(kù)
下載數(shù)據(jù)庫(kù)文件并導(dǎo)入數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)文件可以放在任何地方。我為了方便演示,就一同放在了 /etc/sftpgo 目錄下面。
$ cd /etc/sftpgo $ sudo wget https://raw.XXXusercontent.com/drakkan/sftpgo/master/sql/sqlite/20190706.sql $ sudo wget https://raw.XXXusercontent.com/drakkan/sftpgo/master/sql/sqlite/20190728.sql $ sudo sqlite3 sftpgo.db < 20190706.sql sqlite> .exit $ sudo sqlite3 sftpgo.db < 20190728.sql sqlite> .exit
但是我在直接使用遷移文件的時(shí)候報(bào)錯(cuò)了,貌似是不支持某個(gè)操作。
所以我直接合并了兩條 SQL 語(yǔ)句,直接在庫(kù)里面執(zhí)行了。操作過(guò)程如下:(如果上面的操作出錯(cuò)了再嘗試執(zhí)行下面的,正常跳過(guò)這一步)
$ 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>
這樣數(shù)據(jù)庫(kù)就算創(chuàng)建完成了。
注:關(guān)于 SQLite 的操作說(shuō)明請(qǐng)查看 SQLite 教程: https://www.runoob.com/sqlite/sqlite-tutorial.html
配置 SFTPGo 的 Systemd 服務(wù)$ cd /etc/systemd/system $ sudo wget https://raw.XXXusercontent.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 的運(yùn)行狀態(tài)了。以下為 sftpgo.service 內(nèi)容。
$ cat /etc/systemd/system/sftpgo.service [Unit] Deion=SFTPGo sftp server After=network.target
[Service]User=rootGroup=rootType=simpleWorkingDirectory=/etc/sftpgoEnvironment=SFTPGO_CONFIG_DIR=/etc/sftpgo/Environment=SFTPGO_LOG_FILE_PATH=/var/log/sftpgo.logEnvironmentFile=-/etc/sftpgo/sftpgo.envExecStart=/usr/bin/sftpgoKillMode=mixedRestart=alwaysRestartSec=10s
[Install]WantedBy=multi-user.target
到這里,我們的 SFTPGo 軟件就已經(jīng)運(yùn)行起來(lái)了,并且開(kāi)啟了一個(gè) 127.0.0.1:8080 的服務(wù),我們可以通過(guò)它提供的 REST API 來(lái)進(jìn)行 SFTP 的用戶管理工作。
注:因?yàn)榘踩脑?,這個(gè)服務(wù)只允許內(nèi)網(wǎng)訪問(wèn),如果想開(kāi)放到外網(wǎng),請(qǐng)自行搭建 Nginx / Caddy 等反向代理工具代理一下就行。
使用 SFTPGo REST API
官方暫時(shí)沒(méi)有提供管理操作面板,只提供了一個(gè)簡(jiǎn)單的基于 Python 的 Cli 工具 sftpgo_api_cli,這里就簡(jiǎn)單演示一下:
$ cd ~$ sudo mkdir -p /data/sftp/$ wget https://XXX.com/drakkan/sftpgo/raw/master/s/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
上面操作完成后,就簡(jiǎn)單創(chuàng)建了一個(gè)名為 test_username 的用戶 ,并且把目錄限制在 /data/sftp/test_username 下面。然后你可以用 SFTP 客戶端 FileZilla 來(lái)測(cè)試一下,是否可以正常連接和上傳。
以上文章來(lái)源于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系創(chuàng)一網(wǎng)的客服處理。謝謝!