本文涉及一种在容器中部署 sftp 服务的方法。经验证,可达到预期目标,并能应用在实际工作中。

一、引言

因工作需要,需部署 sftp 服务器进行数据测试。

二、技术小结

  • dockerhub 上相关镜像,直接拉取可用。

  • 运行时需要注意用户名和home目录,如使用foo用户,则需要挂载到/home/foo目录。

  • 需要手动设置ssh key,否则每次重启都会产生新的key。

  • 上传权限问题暂未解决。

三、实践

3.1 下载

命令:

docker pull atmoz/sftp

测试运行:

docker run \-v /tmp/upload:/home/foo/upload \--name sftp \-p 2222:22 -itd atmoz/sftp \foo:pass:1000

注:挂载 tmp/upload到容器home的同名目录下,账号密码分别为foopassUID与执行此命令的主机用户一样,即1000(可通过/etc/passwd文件查看知)。

测试连接:

sftp -P 2222 foo@localhost
foo@localhost's password:
Connected to localhost.
sftp> ls
upload
sftp> cd upload/
sftp> put webdemo
Uploading webdemo to /upload/webdemo
remote open("/upload/webdemo"): Permission denied

提示权限不足,在容器中修改 upload 目录权限:

$ docker exec -it sftp bash
root@35f5c9abeb71:/# cd home/
root@35f5c9abeb71:/home/foo# ls -lh
total 0
drwxr-xr-x. 2 root root 6 May 10 07:05 upload
root@35f5c9abeb71:/home/foo# chmod 777 upload/ -R
root@35f5c9abeb71:/home/foo# ls -lh
total 0
drwxrwxrwx. 2 root root 21 May 10 07:27 upload

则可以正常上传

sftp> put webdemo
Uploading webdemo to /upload/webdemo
webdemo                                       100% 6706KB  53.1MB/s   00:00
sftp> exit

四、sftp常用命令

登陆:
sftp -P <端口> <用户名>@<IP>?:查看帮助
quit:退出
cd lcd:进入某目录 (注:有l前缀表示是宿主机)
ls lls:查看目录
pwd lpwd:查看当前路径
mdir :创建目录
put:上传文件(目录:-r)
get:下载文件

五、指定ssh key

默认情况下,每次重新服务,都会产生新的key,需要用户确认(见附录)。可以手动指定key,解决该问题。

mkdir ssh
cd ssh
ssh-keygen -t ed25519 -f ssh_host_ed25519_key < /dev/null
ssh-keygen -t rsa -b 4096 -f ssh_host_rsa_key < /dev/null

在运行添加如下参数:

-v <host-dir>/ssh_host_ed25519_key:/etc/ssh/ssh_host_ed25519_key \
-v <host-dir>/ssh_host_rsa_key:/etc/ssh/ssh_host_rsa_key \

六、docker-compose部署

对应的yaml文件如下:

version: "2"
services:sftp:image: atmoz/sftpcontainer_name: sftpvolumes:- ./upload:/home/aftp/- ./ssh/ssh_host_ed25519_key:/etc/ssh/ssh_host_ed25519_key- ./ssh/ssh_host_rsa_key:/etc/ssh/ssh_host_rsa_keyports:- "2222:22"command: aftp:passworld:1000

注:本例中将当前目录的upload目录直接挂载到用户的home目录,不似上述在upload目录。这样客户端连接后的根目录就是宿主机的upload目录,较方便。

七、参考

sftp 镜像:https://hub.docker.com/r/atmoz/sftp

网上有文章在运行容器命令时添加--privileged=true参数。

首次运行时,用sftp命令连接时,需要确认,提示如下:

The authenticity of host '[localhost]:2222 ([::1]:2222)' can't be established.
ED25526 key fingerprint is SHA256:FUCkkcufctB3fasdf45sszVCaqRQTY7+Qasjw235A+XwCg.
ED25526 key fingerprint is MD5:17:fu:ck:3d:bb:aa:00:35:79:ac:bc:cc:dc:ec:71:bb.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:2222' (ED25526) to the list of known hosts.

如果重新启动(这样也算是首次运行),则会提示:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:FTKtctB6yBQasdfasdfasdf3fasdf7+QSBTLyyasdfasdfasdfCg.
Please contact your system administrator.
Add correct host key in /home/lateee/.ssh/known_hosts to get rid of this message.
Offending ED25526 key in /home/lateee/.ssh/known_hosts:4

此时,需要编辑/home/lateee/.ssh/known_hosts文件,删除对应的那一行信息(本文中,会带有 2222 字样)。

疑问:如果使用程序连接,首次出现上述提示,如何输入yes?待研究。

在一次用 docker-compose 运行时,客户端连接出现:

$ sftp -P2222 foo@127.0.0.1
Connection closed by 127.0.0.1 port 2222
Couldn't read packet: Connection reset by peer

经查,是因为 sftp 服务器目录在 Windows 系统,改为 Linux 系统,问题解决。(为减少虚拟机空间占用,并方便调试,笔者习惯使用虚拟机的共享目录,在 Linux 中操作 Windows 硬盘。)

2021.5.10

我的docker随笔32:sftp服务部署相关推荐

  1. 我的docker随笔19:Nextcloud部署

    一.背景 Nextcloud是个人云存储服务,提供云存储服务,内置了Office文档.图片相册.日历联系人.两步验证.文件管理.RSS阅读等丰富的应用.可安装在本地或云主机,本文使用Docker进行部 ...

  2. 将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

    介绍 本文的目的是:通过使用 DockerHub 和 Azure Kubernetes Service (AKS) 将之前 使用 .NET 和 Docker 构建的微服务 部署到微软 Azure 云上 ...

  3. 新一代微服务全家桶AlibabaCloud+Docker+JDK11阿里云容器部署零基础到项目实战

    新一代微服务全家桶AlibabaCloud+Docker+JDK11阿里云容器部署零基础到项目实战 近年来,微服务架构已经成为企业标配,它以更加灵活的部署方式和高度解耦的架构设计,为企业带来了极大的业 ...

  4. 利用Docker/Ansible实现轻量集群服务部署(视频演示+彩蛋)

    周良伟 网易云信系统架构师 负责云信IM平台的架构设计和服务器研发团队 作者简介 今天和大家分享的主题是如何用Docker/Ansible来做轻量私有化的技术方案.首先,简单介绍一下所谓轻量私有化到底 ...

  5. Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之Docker Duckling服务部署

    Rasa课程.Rasa培训.Rasa面试.Rasa实战系列之Docker Duckling服务部署 vmvare 本地安装 docker Duckling服务 简介在windows 10 本地电脑上安 ...

  6. SpringCloud(5)— 微服务部署(Docker)

    SpringCloud(5)- 微服务部署(Docker) 一 初识Docker 1.项目部署问题 大型项目组件较多,运行环境较为复杂,部署和维护困难 依赖关系复杂,容易出现兼容性问题 开发,测试,生 ...

  7. docker swarm 集群服务编排部署指南(docker stack)

    Docker Swarm 集群管理 概述 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机,使得容器可以组成跨主机的子网网络.D ...

  8. Docker入门 服务部署的艺术

    Docker入门 服务部署的艺术 本课程可能涉及的内容 :Docker核心命令, Docker软件部署,Dockerfile镜像制作, Docker实战, Docker集群搭建 Docker需求:高可 ...

  9. Linux部署SFTP服务

    Linux - 建设篇 第二章 Linux部署SFTP服务 Linux - 建设篇 系列文章回顾 下章内容 Linux虚拟机安装SSH服务 创建ftp所属组的用户,设置密码,创建用户家目录 修改ssh ...

最新文章

  1. 深度学习:垃圾自动分类
  2. python 100题
  3. mac如何将本地服务暴露到外网?
  4. Dom onload和jQuery document ready的区别
  5. python webui测试ie浏览器环境配置_python+selenium做ui自动化测试用法必会
  6. 使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法 ——转载...
  7. 联想A208T ROOT
  8. 微课|中学生可以这样学Python(例3.2):今天是今年的第几天
  9. 作为一个php程序员要学会的技能
  10. 8. Sphinx 站内搜索
  11. Ryu控制器正则表达式字符串 r'[0-9]{1,4}|all' 分析
  12. kali 切换图形界面_kali切换桌面环境
  13. JQuery淡出淡入动画
  14. 柠檬班高级性能测试13期这个课老师讲的很细腻需要了解见正文
  15. js 实现网页内容语音朗读功能
  16. 银行大数据应用案例(研讨会整理)
  17. python 单词拆音节_使用Python查找音节
  18. lisp把选集转成表_cad_lisp基础教程.pdf
  19. 互联网的一些小知识点
  20. ann神经网络matlab,ann神经网络(深入浅出图神经网络 pdf)

热门文章

  1. 腾讯网游加速器大升级!5月31日起仅支持国服游戏加速 你用过吗?
  2. 英特尔傲腾存储业务主管已离职 因个人原因离开
  3. 上海市消保委:春节长假期间 共受理消费者投诉4600件
  4. 讯飞超脑2030计划开启 持续引领人工智能未来发展
  5. 顺丰同城通过港交所聆讯 今年前五个月收入为30.46亿元
  6. 研究机构预计芯片短缺将导致全球轻型汽车今年减产502万辆
  7. 中信证券:维持贝壳“买入”的投资评级
  8. 比尔盖茨:希望我们的家庭能够获得空间和隐私
  9. 新浪微博被罚了,暂停更新微博热搜榜一周
  10. 国产手机卖的越来越贵,是好是坏?