如果你需要一个独立的 SFTP 服务器,这可能是你最好的选择!

640?wx_fmt=jpeg

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 需要的系统环境

  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 查看你的环境变量。

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

配置 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 文件配置内容	
$ 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 目录下面。

$ 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 语句,直接在库里面执行了。操作过程如下:(如果上面的操作出错了再尝试执行下面的,正常跳过这一步)

$ 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 服务

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

$ 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

官方暂时没有提供管理操作面板,只提供了一个简单的基于 PythonCli 工具 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 下面。然后你可以用 SFTP 客户端 FileZilla 来测试一下,是否可以正常连接和上传。

更多详细的相关说明可以看官方 sftpgo_api_cli 使用文档:https://github.com/drakkan/sftpgo/tree/master/scripts

其他文档与相关配置说明

  1. SFTPGo

  2. REST API CLI client

来源:跨出界

原文:https://tinyurl.com/yxsebcv5

题图:来自谷歌图片搜索

版权:本文版权归原作者所有

投稿:欢迎投稿,邮箱: editor@hi-linux.com

640?wx_fmt=gif

640?wx_fmt=png

你可能还喜欢

点击下方图片即可阅读

SFTP(Secure File Transfer Protocol)是一种安全的文件传输协议,通常用于远程登录和文件传输,而Tomcat是一个Java Servlet容器,用于运行Web应用程序。在一台服务器上部署了SFTP和Tomcat,它们是两个独立的服务,分别处理网络文件传输和HTTP请求。 如果Tomcat的应用程序试图通过SFTP连接来采集数据,却无法连接,可能的原因有: 1. **权限问题**:Tomcat进程可能没有正确的权限来访问SFTP服务。确保Tomcat的用户账户具有足够的权限来执行SFTP操作。 2. **防火墙或安全组设置**:服务器可能存在防火墙规则阻止了Tomcat尝试连接到SFTP端口(通常是22或指定的SFTP端口)。 3. **IP限制**:SFTP服务器可能设置了只允许特定IP地址连接。检查Tomcat的IP是否被添加到白名单。 4. **SFTP配置错误**:在SFTP服务器的配置中,如果监听地址或端口设置不正确,可能会导致连接失败。 5. **SSH服务未启动**:SFTP基于SSH协议,如果SSH服务未运行,将无法建立SFTP连接。确认SSH服务是否正常启动。 6. **网络问题**:网络连接不稳定或延迟也可能导致连接尝试失败。 7. **代码错误**:如果应用程序中的SFTP连接代码有误,比如URL格式错误、用户名/密码错误等,也会导致连接不上。 为了解决这个问题,你可以逐一排查上述原因,并根据具体情况进行调整。如果问题是由于代码错误引起的,检查并修复相关的SFTP连接逻辑。如果不确定如何解决,可以尝试使用telnet或SSH工具测试连接,以便找到问题的具体来源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值