我的docker随笔32:sftp服务部署
本文涉及一种在容器中部署 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
的同名目录下,账号密码分别为foo
、pass
,UID
与执行此命令的主机用户一样,即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服务部署相关推荐
- 我的docker随笔19:Nextcloud部署
一.背景 Nextcloud是个人云存储服务,提供云存储服务,内置了Office文档.图片相册.日历联系人.两步验证.文件管理.RSS阅读等丰富的应用.可安装在本地或云主机,本文使用Docker进行部 ...
- 将微服务部署到 Azure Kubernetes 服务 (AKS) 实践
介绍 本文的目的是:通过使用 DockerHub 和 Azure Kubernetes Service (AKS) 将之前 使用 .NET 和 Docker 构建的微服务 部署到微软 Azure 云上 ...
- 新一代微服务全家桶AlibabaCloud+Docker+JDK11阿里云容器部署零基础到项目实战
新一代微服务全家桶AlibabaCloud+Docker+JDK11阿里云容器部署零基础到项目实战 近年来,微服务架构已经成为企业标配,它以更加灵活的部署方式和高度解耦的架构设计,为企业带来了极大的业 ...
- 利用Docker/Ansible实现轻量集群服务部署(视频演示+彩蛋)
周良伟 网易云信系统架构师 负责云信IM平台的架构设计和服务器研发团队 作者简介 今天和大家分享的主题是如何用Docker/Ansible来做轻量私有化的技术方案.首先,简单介绍一下所谓轻量私有化到底 ...
- Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之Docker Duckling服务部署
Rasa课程.Rasa培训.Rasa面试.Rasa实战系列之Docker Duckling服务部署 vmvare 本地安装 docker Duckling服务 简介在windows 10 本地电脑上安 ...
- SpringCloud(5)— 微服务部署(Docker)
SpringCloud(5)- 微服务部署(Docker) 一 初识Docker 1.项目部署问题 大型项目组件较多,运行环境较为复杂,部署和维护困难 依赖关系复杂,容易出现兼容性问题 开发,测试,生 ...
- docker swarm 集群服务编排部署指南(docker stack)
Docker Swarm 集群管理 概述 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机,使得容器可以组成跨主机的子网网络.D ...
- Docker入门 服务部署的艺术
Docker入门 服务部署的艺术 本课程可能涉及的内容 :Docker核心命令, Docker软件部署,Dockerfile镜像制作, Docker实战, Docker集群搭建 Docker需求:高可 ...
- Linux部署SFTP服务
Linux - 建设篇 第二章 Linux部署SFTP服务 Linux - 建设篇 系列文章回顾 下章内容 Linux虚拟机安装SSH服务 创建ftp所属组的用户,设置密码,创建用户家目录 修改ssh ...
最新文章
- 深度学习:垃圾自动分类
- python 100题
- mac如何将本地服务暴露到外网?
- Dom onload和jQuery document ready的区别
- python webui测试ie浏览器环境配置_python+selenium做ui自动化测试用法必会
- 使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法 ——转载...
- 联想A208T ROOT
- 微课|中学生可以这样学Python(例3.2):今天是今年的第几天
- 作为一个php程序员要学会的技能
- 8. Sphinx 站内搜索
- Ryu控制器正则表达式字符串 r'[0-9]{1,4}|all' 分析
- kali 切换图形界面_kali切换桌面环境
- JQuery淡出淡入动画
- 柠檬班高级性能测试13期这个课老师讲的很细腻需要了解见正文
- js 实现网页内容语音朗读功能
- 银行大数据应用案例(研讨会整理)
- python 单词拆音节_使用Python查找音节
- lisp把选集转成表_cad_lisp基础教程.pdf
- 互联网的一些小知识点
- ann神经网络matlab,ann神经网络(深入浅出图神经网络 pdf)