Usando Docker login para subir o descargar nuestras imagenes
Cuando instalamos Docker y ejecutamos:
$ docker login
nos muestra por default un mensaje avisandonos que nuestro login se encuentra en texto plano:
WARNING! Your password will be stored unencrypted in /home/max/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Y no queremos nuestro login almacenado por ahi en texto plano.
Credential Stores
Docker ofrece algunas alternativas para almacenar esta información de manera segura:
- *D-Bus Secret Service: https://github.com/docker/docker-credential-helpers/releases
- *Apple macOS keychain: https://github.com/docker/docker-credential-helpers/releases
- *Microsoft Windows Credential Manager: https://github.com/docker/docker-credential-helpers/releases
- pass: https://github.com/docker/docker-credential-helpers/releases
Instalando y configurando Pass
En este caso veremos como usar pass el confiable administrador de contraseñas para sistemas *nix
Lo primero es descargarlo, dependiendo de nuestra distro lo instalaremos, en su pagina podemos encontrar las instrucciones para cada caso (https://www.passwordstore.org/) y en este caso lo haré en un servidor Debian, ademas instalamos gpg y rng-tools:
$ sudo apt-get install pass gpg rng-tools rng-tools5
Una vez instalado esto, crearemos una llave con GPG, y copiaremos el ID de nuestra llave creada:
$ gpg2 --gen-key
Y seguimos las instrucciones en pantalla
Nota: si por alguna razón parece "colgarse" nuestro proceso al crear la llave, realizamos el proceso de nuevo, pero antecediendo con estos pasos:
$ gpg-agent --daemon --use-standard-socket --pinentry-program /usr/bin/pinentry-curses
$ sudo rngd -r /dev/urandom
$ gpg2 --gen-key
Y copiamos el ID de nuestro par de llaves generadas, y que usaremos en el siguiente paso.
Nos mostrará algo como lo siguiente:
gpg: /home/tuusuario/.gnupg/trustdb.gpg: trustdb created
gpg: key 12B45CC4FB34TB71 marked as ultimately trusted
gpg: directory '/home/tuusuario/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/tuusuario/.gnupg/openpgp-revocs.d/32B00A2CF01A1124F9B01EFF12B45CC4FB34TB71.rev'
public and secret key created and signed.
pub rsa3072 2020-10-09 [SC] [expires: 2022-10-09]
32B00A2CF01A1124F9B01EFF12B45CC4FB34TB71
uid Tu Usuario <usuario@mail.mx>
sub rsa3072 2020-10-09 [E] [expires: 2022-10-09]
El renglón debajo de pub es el ID de tu llave que hay que guardar para el siguiente paso
Instalando el credential manager
Nos dirigimos al sitio de descargas del repositorio GitHub y buscamos el release mas reciente https://github.com/docker/docker-credential-helpers/releases:
En este caso:
Y lo descomprimimos:
$ tar -xf docker-credential-pass-v0.6.2-amd64.tar.gz
$ chmod +x docker-credential-pass
$ sudo mv docker-credential-pass /usr/local/bin/
Inicializar pass
Una vez instalado iniciaremos nuestro store de passwords (pass)
$ pass init "llave gpg"
Donde "llave gpg" es la llave previamente copiada del paso de generacion de llave gpg
Despues insertamos lo siguiente en pass:
$ pass insert docker-credential-helpers/docker-pass-initialized-check
Y damos el siguiente password: 'pass is initialized' sin las ' comillas simples.
Revisamos que todo este bien ejecutando lo siguiente:
$ pass show docker-credential-helpers/docker-pass-initialized-check
Y nos debe mostrar "pass is initialized"
Con esto cuando hagamos un login con docker, se encargará de almacenarlo con pass de una forma segura.
Configurando docker con pass
Ahora tenemos que indicarle a docker que use pass como credential manager, esto lo haremos editando el archivo "config.json" en nuestro directorio Home ( lo podemos encontrar en ~/.docker/config.json ) y debe quedar como el siguiente ejemplo siendo la parte importante
"credsStore": "pass" :
{
"auths": {
"https://index.docker.io/v1/": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.6 (linux)"
},
"credsStore": "pass"
}
Una vez hagamos login con docker este ya se almacenará en pass.
Fuentes:
https://github.com/docker/docker-credential-helpers/issues/102
https://medium.com/@yta/manjaro-docker-credential-store-configuration-dd545a905744
https://www.antoniojgutierrez.com/2018/08/11/dockerloginpasswordstore.html