В этом руководстве вы узнаете, как запускать удаленные команды Docker через соединение SSH.
Продолжение статьи:
🐳 Как получить доступ к удаленному Docker демону с помощью SSH
Сетевая безопасность
Перед открытием хоста Docker для удаленных SSH-подключений настоятельно рекомендуется разрешить только доверенный трафик.
Брандмауэр или сетевая политика должны блокировать весь трафик к хосту Docker и заносить в белый список трафик доверенных IP-адресов или подсетей.
Открытый ключ RSA SSH
Для доступа к системе через SSH требуется пользователь с правами доступа к демону Docker.
Также требуется открытый ключ RSA вашего локального пользователя.
Ключ не должен быть защищен парольной фразой, так как вам не будет предложено ввести ее.
Если пара ключей RSA содержит такую фразу, подключение к удаленному хосту Docker завершится ошибкой.
Создайте новую пару ключей RSA, выполнив следующую команду.
ssh-keygen
Используя пару ключей, скопируйте свой открытый ключ пользователю удаленного хоста с помощью команды ssh-copy-id.
ssh-copy-id user1@docker.host
Убедитесь, что ваш открытый ключ был успешно добавлен в профиль пользователя user1 с помощью SSHing на удаленном хосте.
Если вы успешно вошли в систему без запроса пароля или ключевой фразы, вы готовы к выполнению удаленных команд Docker.
Подключение по SSH удаленного клиента Docker
Наконец-то вы готовы удаленно администрировать хост Docker.
Проверьте свой доступ к удаленному хосту, перечислив запущенные контейнеры.
docker -H ssh://user1@docker.host ps
Если все прошло успешно, вы увидите таблицу запущенных контейнеров.
Необходимость использовать флаг -H каждый раз при подключении может быть проблемой, особенно если вы часто работаете с удаленным хостом.
Docker будет искать переменную среды DOCKER_HOST при выполнении команд.
Если она установлена и экспортирована, вы можете избежать необходимости указывать удаленный хост.
Например, давайте установим переменную среды DOCKER_HOST для использования нашего SSH-соединения.
export DOCKER_HOST=ssh://user1@docker.host
Чтобы убедиться, что вы действительно выполняете команды на удаленном хосте Docker, запустите команду docker info.
Система выведет информацию о хосте, к которому вы подключены.
В нашем случае мы запускаем команду с MacBook.
Однако, когда мы выполняем указанную выше команду, мы видим, что это было сделано на сервере Ubuntu 20.04.
Client:
Debug Mode: false
Server:
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 1
Server Version: 19.03.12
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
init version: fec3683
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 5.4.0-42-generic
Operating System: Ubuntu 20.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.844GiB
Name: hackbox
ID: BN37:5UCL:2DMY:WO2Z:KJRA:XU3F:VZXW:OKRL:ISIK:24OX:TANH:QDGK
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Заключение
В этом руководстве вы узнали, как подключиться к удаленному хосту Docker с помощью SSH.
Это очень безопасный и распространенный способ подключения к удаленным хостам, позволяющий удаленно управлять своими контейнерами.
Эта настройка очень полезна для пайплайнов Jenkins CI\CD, поскольку сервер Jenkins может выполнять действия с удаленным хостом.
Это могут быть расширяемые контейнеры для интеграционного тестирования или развертывание нового контейнера Docker в производственной среде.