iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
0
自我挑戰組

自我學習Docker的30天奇幻旅程系列 第 21

Day21 建置自己的第一個Docker sftp

今天我們就要來建置屬於自己的第一個Docker sftp,在建立的時候幾乎是處處碰壁,不過因此也是學習了不少知識。

事前準備

要建立Docker sftp需要一些事前準備檔案或是規劃。

  • atmoz/sftp
    因為我們要建立sftp,而Docker hub上就有提供現成的sftp映像檔(atmoz/sftp)
  • Asymmetric cryptography
    雖然sftp可以使用帳號密碼就能登入,但是透過非對稱的認證機制更安全,因此也會實作使用公鑰及私鑰的做法
  • FileZilla
    當建置好了sftp需要一個連線方式,可以先透過FileZilla這個軟體來做測試

開始建置

首先我們要先取得atmoz/sftp

docker pull atmoz/sftp

再來看一段官方提供的atmoz/sftp建立格式

docker run \
    -v <host-dir>/upload:/home/<username>/upload \
    -p 2222:22 -d atmoz/sftp \
    <username>:pass:1001
  • volumes的設定是透過共享host位置用來儲存檔案,這樣重建容器檔案還會在
  • sftp server預設的port為22,這邊我們公開到本機的2222
  • foo:pass:1001這邊只有三個,但其實可以設定五個格式是<user>:<pass>:<UID>:<GID>:<dir>,最後一個是儲存檔案的子資料夾位置,但因為我們有設定volumes所以就不設置他,如果都沒有設置是沒辦法存取檔案在/HOME底下的

sftp server

接下來我們就可以建立基本的sftp

docker run \
    -v d:/share:/home/user/share \
    -p 2222:22 -d atmoz/sftp \
    user:1111:1001

我這邊是共享d:/share並將username設置為user,密碼為1111,執行完就可以看到我們的sftp已經建立成功。

安裝FileZilla

接下來我們要透過FileZilla這套軟體來連接我們建立好的sftp。
進到FileZilla官網並下載並安裝FileZilla client

安裝並開啟就可以看到以下畫面

接下來就要連結我們的sftp
1.點選file開啟下拉選單再點選Site Manager,並點選New site簡單命名這個site,再來我們要選擇Protocol為SFTP,再填入host為你的Domain host(如例為localhost)以及公開的port(如例為2222),Login Type就設定Normal並填入username以及password,再按下Connect就可以連接成功了。

連接成功

這邊要注意,如果嘗試把檔案拉至根目錄底下,根目錄是沒有存取權限的因此傳輸會失敗。

sftp server with Asymmetric cryptography

雖然可以設定帳號密碼來登入,但是安全性比較差,尤其是密碼有被破解的可能,因此接下來要來使用公鑰私鑰的方式來登入。

1.首先進到自己喜歡的目錄底下,用來產生並儲存公/私鑰,產生公/私鑰的方法是透過ssh-keygen命令,而我們是使用ed25519來加密。如下就會產生兩個檔案一個為ssh_host_ed25519_key.pub另一個則是ssh_host_ed25519_key

ssh-keygen -t ed25519 -f ssh_host_ed25519_key

接下來我們要將我們的公鑰放置sftp server裡面,因此在同個目錄底下建立Dockerfile來配置我們的動作

FROM atmoz/sftp
RUN mkdir -p /home/user/.ssh/keys
COPY ./ssh_host_ed25519_key.pub /home/user/.ssh/keys/

之後建置我們的sftp

docker build -t first-sftp .

接下來我們就可以讓我們的container run起來

docker run \
    -v d:/share:/home/user/share \
    -p 2223:22 \
    -d first-sftp \
    user::1001

這邊我們不設置password就是要讓使用者只能使用private key來登入

執行好就可以連接我們的sftp
1.設置private key,打開我們的FileZilla畫面,點選Edit打開下拉選單,點擊Settings再選擇Connection底下的SFTP選擇Add key file來添加我們剛剛建立的private key,添加完成就可以按下OK。

之後一樣去Site manager建立新的site,配置host、port、user而password則留空再按下connect,就可以連接了。

總結:

今天在建立的時候一直搞不清楚sftp以及Asymmetric cryptography如何使用,到最後才知道要將公鑰存在sftp server,還以為怎麼都連不到真是搞笑/images/emoticon/emoticon67.gif

參考文獻:
Docker hub atmoz/sftp


上一篇
Day20 MongoDB with Docker and Docker secrets
下一篇
Day22 sftp APP建置專案架構
系列文
自我學習Docker的30天奇幻旅程24

尚未有邦友留言

立即登入留言