FTP
Client
接続
# 下記のどちらか
# 1.
ftp ${接続先ホスト} ${接続先ポート}
# 2.
ftp
ftp> open ${接続先ホスト} ${接続先ポート}
Server
vsftpd
sudo apt update && sudo apt -y upgrade && sudo apt -y install vsftpd
sudo systemctl enable vsftpd
sudo systemctl restart vsftpd
停止
sudo systemctl disable vsftpd
atmoz/sftp(1)
version: '3'
services:
sftp:
image: atmoz/sftp
container_name: sftp-test
# docker-compose.ymlがあるディレクトリに、コンテナとの共有ディレクトリを作る
volumes:
- ./data:/home/testuser/data
ports:
- "2222:22"
command: testuser:test123:::data
参考
atmoz/sftp
鍵を使って接続する。
- 鍵作成する。
- 下記コマンドで起動。
docker run \ -v <host-dir>/id_rsa.pub:/home/foo/.ssh/keys/id_rsa.pub:ro \ -v <host-dir>/id_other.pub:/home/foo/.ssh/keys/id_other.pub:ro \ -v <host-dir>/share:/home/foo/share \ -p 2222:22 -d atmoz/sftp \ foo::1001
コンテナ側の${HOME}/.ssh/keys
配下に公開鍵を配置すると、authorized_keysに追記してくれる。
dokcer-composeだとうまく行かない?
Dockerホストから接続
sftp -i <host-dir>/id_rsa -P2222 foo@localhost
クライアントDockerコンテナを作る
FROM ubuntu:latest
RUN apt update && apt upgrade -y && apt install -y less nano openssh-client sudo
ARG USERNAME=user
ARG GROUPNAME=user
ARG UID=1000
ARG GID=1000
ARG PASSWORD=user
RUN groupadd -g $GID $GROUPNAME && \
useradd -m -s /bin/bash -u $UID -g $GID -G sudo $USERNAME && \
echo $USERNAME:$PASSWORD | chpasswd && \
echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
USER $USERNAME
WORKDIR /home/$USERNAME/
COPY .ssh/ /home/$USERNAME/.ssh/
RUN sudo chown -R $USERNAME:$GROUPNAME /home/$USERNAME
.ssh配下に鍵ファイルがある想定。
version: '3'
services:
sftp_client:
build: ./docker/client
container_name: sftp_client
tty: true
鍵ファイルはvolumeで渡しても良さそうな気がするが、未確認。
docker exec -it sftp_client /bin/bash
sftp -i ./.ssh/id_rsa -P2222 foo@${ホストローカルIP}
WSL2のIPアドレスの取得方法
WSL2でコンテナ起動した場合に参照するIPは下記で取得する。
ip a show dev eth0