iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
0
自我挑戰組

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

Day24 將private key安全地放入容器內

今天來完成在ubuntu中私鑰的使用問題。在回去看了一遍之前的文章,以及翻閱了官網的Document之後,看到了secrets的用法,剛好就適合處理private key,當初真該早點意識到的。

1.在compose-file的檔案中加入secrets的建立配置

secrets:
  ubuntu_ed_key:
    file: ./secret/ssh_host_ed25519_key

2.再來將要使用secret的APP標示出來,如我們昨天的例子就是用interfact

version: "3.8"
services:
  first-sftp:
    image: first-sftp:1.0
    build:
      context: ./sftp/
      dockerfile: Dockerfile
    ports:
      - 2222:22
    volumes:
      - ./secret/ssh_host_server_ed25519_key:/etc/ssh/ssh_host_ed25519_key
      - d:/share:/home/user/share
    command: user:1111:1001
  interfact:
    image: interfact:1.0
    build:
      context: ./interfact/
      dockerfile: Dockerfile
    ports:
      - 2223:80
    tty: true
    secrets:
      - source: ubuntu_ed_key
        mode: 0400         # mode 設成400只有自己可讀,這樣sftp才不會說你太開放
secrets:
  ubuntu_ed_key:
    file: ./secret/ssh_host_ed25519_key

3.使用stack執行起來我們的服務,可以看到多建立了secret的項目

$ docker stack deploy -c docker-compose.yaml sftp-app
Ignoring unsupported options: build

Creating network sftp-app_default
Creating secret sftp-app_ubuntu_ed_key
Creating service sftp-app_interfact
Creating service sftp-app_first-sftp

4.查看secret檔案。在我們的服務執行起來之後,可以進入我們的container查看secret檔案,secret檔案會放在/run/secrets/目錄底下。

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS   
            NAMES
6ac3d6f74ba8        first-sftp:1.0      "/entrypoint user:11…"   27 seconds ago      Up 23 seconds       22/tcp  
            sftp-app_first-sftp.1.wes9z5s6ocgs40qoj6g7j9duo
e972c598a9fa        interfact:1.0       "/bin/bash"              30 seconds ago      Up 27 seconds
            sftp-app_interfact.1.0c9ajol7ms0lzir8egq9edxo1
$ docker exec -it e972c598a9fa bash
root@e972c598a9fa:/# cd run/secrets/
root@e972c598a9fa:/run/secrets# ls
ubuntu_ed_key
# 可以看到我們剛剛建立名為ubuntu_ed_key的secret檔案

5.尋找sftp server的位址

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
678l08i7hqmn        sftp-app_default    overlay             swarm
$ docker inspect 678l08i7hqmn
# 找到first-sftp的位址

6.接下來就可以使用sftp指令連接我們建置的sftp server,第一次連接都會要我們認證sftp,之後就不用了。

root@d0dfaf2e1e6d:/# sftp -i run/secrets/ubuntu_ed_key user@10.0.2.3
The authenticity of host '10.0.2.3 (10.0.2.3)' can't be established.
RSA key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.2.3' (RSA) to the list of known hosts.
Connected to 10.0.2.3.
sftp>

看到sftp>就是連接成功了


上一篇
Day23 連接ubuntu與sftp的橋樑
系列文
自我學習Docker的30天奇幻旅程24

尚未有邦友留言

立即登入留言