Теперь, когда я подключаюсь к нему через SSH, я не могу получить свой env там через
принтенв ФЛАГ. Как я могу это исправить? При запуске с -it и sh я могу
мой получить env через printenv FLAG
Вы делаете две разные вещи:
docker run -it -e FLAG='***' rastasheep/ubuntu-sshd sh
будет запускать контейнер в интерактивном режиме с оболочкой, а в этом сеансе оболочки будет иметь переменную окружения , которую вы передали в командной строке. При docker run -d -e FLAG='***' rastasheep/ubuntu-sshd
процесс демона SSH начнется с определенных переменных env.
- при подключении в контейнере с SSH вы создадите новый сеанс оболочки , для которого не установлены эти переменные среды .
Это можно наблюдать при запуске контейнера, подключении к нему с помощью ssh и отображении всех процессов и их переменных среды:
docker run -d -p 2222:22 -e FLAG='test' rastasheep/ubuntu-sshd
ssh root@localhost -p 2222
...
Теперь мы подключены к контейнеру, мы видим процесс демона SSH (PID 1) и наш процесс сеанса SSH (PID 7):
root@788fa982c2d0:~# ps -xf
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 /usr/sbin/sshd -D # <== does have the FLAG env var
7 ? Ss 0:00 sshd: root@pts/0 # <== no FLAG env var
Давайте проверим это, напечатаем наш текущий env var процесса и env var процесса SSH-демона:
root@788fa982c2d0:~# printenv FLAG # Nothing
root@788fa982c2d0:~# cat /proc/1/environ # We see the FLAG env var!
[..]FLAG=test[...]
Как отмечает @Dmitrii, вы можете прочитать Dockerize SSH service для получения более подробной информации.