SftpGo:一款高性能的sftp server服务

SftpGo是一款高性能、功能齐全、易用可配置的一款sftp server 服务,基于go开发。目前在linux、macos下均可以稳定运行(windows个人未测试)。数据可以持久化到主流的数据库,诸如Mysql、PostgreSQL、Sqlilte.  

image.png

sftpgo主要组成
  • 服务端主程序: sftpgosever
  • cli脚本: sftpcli
数据目录

image.png

  • conf存储服务配置文件
  • data创建sftp用户目录
  • backups存储应用备份数据

本次基于k8s运行服务、mysql5.7做持久化存储、腾讯云NFS服务做数据目录、configmap挂载配置文件、nginx stream提供域名映射tcp访问

构建镜像
  直接拉取
docker pull taylordang/sftpgo:v1.0
  本地基于Dockerfile构建
查看具体文档: [https://github.com/dtcka/sftpgo/tree/master/docker/sftpgo/alpine](https://github.com/dtcka/sftpgo/tree/master/docker/sftpgo/alpine)
构建脚手架
构建脚本: [https://github.com/dtcka/sftpgo/blob/master/docker/rest-api-cli/Dockerfile](https://github.com/dtcka/sftpgo/blob/master/docker/rest-api-cli/Dockerfile)
标准配置文件
{
       "sftpd": {
               "bind_port": 2022,
               "bind_address": "0.0.0.0",
               "idle_timeout": 15,
               "max_auth_tries": 0,
               "umask": "0022",
               "banner": "",
               "upload_mode": 0,
               "actions": {
                       "execute_on": [],
                       "command": "",
                       "http_notification_url": ""
               },
               "keys": [],
               "kex_algorithms": [],
               "ciphers": [],
               "macs": [],
               "login_banner_file": "",
               "setstat_mode": 0,
               "enabled_ssh_commands": [
                       "md5sum",
                       "sha1sum",
                       "cd",
                       "pwd",
                       "scp"
               ],
               "keyboard_interactive_auth_program": "",
               "proxy_protocol": 0,
               "proxy_allowed": []
       },
       "data_provider": {
               "driver": "mysql",
               "name": "sftpgo",
               "host": "xxxxxx",
               "port": 9999,
               "username": "sftpgo",
               "password": "xxxxx",
               "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,
               "credentials_path": "credentials",
               "pre_login_program": ""
       },
       "httpd": {
               "bind_port": 8080,
               "bind_address": "0.0.0.0",
               "templates_path": "templates",
               "static_files_path": "static",
               "backups_path": "backups",
               "auth_user_file": "",
               "certificate_file": "",
               "certificate_key_file": ""
       }
}
运行应用

   以上服务配置准备完成之后,运行容器会在数据库中自动生成对应的表
image.png

提供服务外部入库
1. 设置内网服务入口
apiVersion: v1
kind: Service
metadata:
 name: sftpgo
 namespace: sftp
spec:
 clusterIP: xxxx
 externalTrafficPolicy: Cluster
 ports:
 - name: 8080-8080-tcp
   nodePort: 31807
   port: 8080
   protocol: TCP
   targetPort: 8080
 - name: 2022-2022-tcp
   nodePort: 30865
   port: 2022
   protocol: TCP
   targetPort: 2022
 selector:
   k8s-app: sftpgo
   qcloud-app: sftpgo
 sessionAffinity: None
 type: LoadBalancer
status:
 loadBalancer:
   ingress:
   - ip: xxxx
2. 设置外部服务入口

  - nginx配置文件   ``` apiVersion: v1 data: nginx.conf: |- user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } stream { server { listen 2022; proxy_pass sftpgo服务对应的内网ip:2022; } } kind: ConfigMap metadata: name: tcp-config namespace: sftp


##### 3.测试下服务状态以及数据目录权限
![image.png](https://img-blog.csdnimg.cn/20200419100513838.png)
<br />测试ok:数据权限UID GID需要设置为1003.<br />

##### 4. 设置域名解析到nginx的externalIps即可实现域名访问
![image.png](https://img-blog.csdnimg.cn/2020041910051459.png)

---
<br/>
<br/>
附:

sftpgo服务源码:https://github.com/dtcka/sftpgo/tree/master/docker/sftpgo/alpine sftpgo容器相关镜像:https://hub.docker.com/repository/docker/taylordang/sftpgo sftpgo脚手架:https://hub.docker.com/repository/docker/taylordang/sftp-api-cli

```

更多内容请访问【云原生建筑师】https://blog.dtcka.com

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux SFTP服务器是一个安全文件传输协议(SFTP服务器,用于在Linux操作系统上安全地传输文件。SFTP是一种通过SSH(Secure Shell)协议进行加密的文件传输协议,可以在网络上安全地传输文件。 要设置Linux SFTP服务器,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了OpenSSH软件包。如果没有安装,请使用适用于您的Linux发行版的包管理器进行安装。 2. 打开终端,编辑OpenSSH服务器配置文件。在大多数Linux发行版上,配置文件位于/etc/ssh/sshd_config。 3. 在配置文件中找到并确保以下行未被注释掉: ``` Subsystem sftp /usr/lib/openssh/sftp-server ``` 如果没有找到这一行或被注释掉了,请将其取消注释或添加到文件中。 4. 保存并关闭配置文件。 5. 重启OpenSSH服务器以使更改生效。您可以使用以下命令来重启: ``` sudo service ssh restart ``` 6. 创建SFTP用户。您可以使用以下命令创建一个新的系统用户,并限制其只能使用SFTP: ``` sudo adduser sftp_user sudo usermod -s /usr/lib/openssh/sftp-server sftp_user sudo usermod -d /path/to/sftp_directory sftp_user ``` 将"sftp_user"替换为您要创建的用户名,并将"/path/to/sftp_directory"替换为希望用户访问的目录路径。 7. 设置访问权限。确保SFTP目录的权限只允许SFTP用户访问,并禁止其他用户访问。 ``` sudo chown root:root /path/to/sftp_directory sudo chmod 700 /path/to/sftp_directory ``` 8. 现在,您的Linux SFTP服务器已经设置好了。您可以使用任何支持SFTP的客户端连接到服务器,并进行安全的文件传输。 请注意,这只是设置基本的Linux SFTP服务器的步骤。根据您的需求和安全要求,您可能需要进一步配置和调整服务器设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值