Docker acces via SSH
Objectif :
Simplifier le développement en accédant aux fichiers de mon container #Docker via SSH
( on ouvre le container comme dans un gestionnaire de fichier )
STORY (motivation)
J'installe un nouveau #Shaarli
( autour d'un #corpus élargi ) ( qui sera privé )
Je voudrais suivre la branche Master du projet Shaarli
( {ici} j'ai bifurqué pour ajouter quelles fonctionnalités )
( {ici} j'ai ajouté un champ pour l'aperçu illustrant chaque {bulle} )
( l'image à gauche... car parfois Shaarli n'en trouve pas dans la page/lien )
Ajout de champ
Dans la nouvelle version je veux ajouter le même champ
... en suivant la documentation : edit_link_plugin
En faisant mes propres recherches...
je m'aperçois que le plugin Démo nous montre la voie :
- https://github.com/shaarli/Shaarli/tree/master/plugins/demo_plugin
( après, intégrer par moi-même un field.champ n'avait pas été compliqué )
( la Démo nous montre comment l'ajouter + enregistrer -pas comment l'intégrer )
Bug
Malheureusement, dans la nouvelle version de #shaarli il y a un bug...
- https://github.com/shaarli/Shaarli/issues/2000
- https://github.com/shaarli/Shaarli/issues/1808 )
qui fait que l'ajout de champ + récupération des données ne marche pas...
( ... c'est bien la peine que je mette en place un accès à mon #Docker #SSH en local )
Docker
Du coup je repars sur une version Docker
Et pour faire ça (mes modifs / ajouts)..
je vais vouloir interagir avec le contenu de container de façon fluide.
. La technique "normale" consiste à récupérer un fichier dans le Container
. L'éditer
. et le remettre...
. . cela me semble fastidieux...
Du coup, j'ai envie de tester avec #SSH !
Pour cela le container doit faire tourner SSH
( et ses ports doivent être ouverts vers l'Host )
( Host = hôte = machine.ordi dans lequel est installé Docker qui contient le container)
( Ordi = Host > Docker > Container(s) > OS > Apps.services, ex: Shaarli )
Version courte
( open host -> docker )
sudo docker exec -it -u root DOCKER_NAME sh
( dans docker )
sleep 1
echo "--- Install stuffs"
apk update; apk add openssh-server
apk add openrc openssh
# opt
apk add --no-cache nano
apk add --no-cache bash
echo
echo "--- Generate SSH Keys" && sleep 3
mkdir -p /root/.ssh
chmod 0700 /root/.ssh
ssh-keygen -A
echo
echo "--- allow ROOT Authentification" && sleep 3
echo " " >> /etc/ssh/sshd_config
echo " " >> /etc/ssh/sshd_config
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
echo "PermitEmptyPasswords yes" >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
echo
sleep 1
echo "--- creat ROOT password"
passwd
echo "\n------- ALL CONFIGURED ==> reStart \n"
echo
echo "--- reSTART sshd, can be long" && sleep 3
rc-status
touch /run/openrc/softlevel
/etc/init.d/sshd restart
( ok, on exit du Docker_Container )
( on chope son IP, on s'y connecte en SSH )
echo "---- You can exit"
exit
echo "\n------- HOWTO CONNECT \n"
echo
echo "then get Container IP"
echo "D_NAME == Container Name"
echo "docker container inspect -f '{{ .NetworkSettings.Networks.shaarli_default.IPAddress }}' D_NAME"
echo
echo "---- Then connect"
ssh root@172.17.0.X -p 22
Marche à suivre (notes installation)
SOURCES
- https://dev.to/yakovlev_alexey/running-ssh-in-an-alpine-docker-container-3lop
- https://techoverflow.net/2021/05/17/how-to-enable-ssh-root-login-on-alpine-linux/
DOCKERFILE
( ex. instructions - shot version )
- https://gdevillele.github.io/engine/examples/running_ssh_service/
- https://stackoverflow.com/a/68302177
PORT forward
( Port SSH par défaut : 22 )
( Connexion Host -> Docker )
0.0.0.0:2222 22/tcp
! at dock creation
--publish 8800:80 --publish 2222:22
Go into Docker Container
( where to install ssh-serveur access )
( on pourra aussi créer un nouvel utilisateur non root )
docker exec -it -u root D_CONTAINER_NAME sh
INSTALL d'app/services via APK (Alpine)
apk update
apk add openssh-server
apk add openrc openssh
Optionnel
apk add nano
apk add bash
INIT CONFIG SSH
mkdir -p /root/.ssh
chmod 0700 /root/.sshssh-keygen -A
rc-status
touch /run/openrc/softlevel
/etc/init.d/sshd start
SET PWD (root)
passwd
passwd -u root # <- UNSET = null
Allow Host SSH->Container connexion
( default user is root )
( here we allow for root, not most secure )
( ... you can creat a new user if needed )
For Root user :
nano /etc/ssh/sshd_config
PermitRootLogin yes
authentification w/ pwd
PasswordAuthentication yes
PermitEmptyPasswords yes
... THEN on redémarre le service SSH
... pour qu'il fonctionne avec nos nouveaux paramètres
service sshd restart
CONNECTION
GET CONTEINER IP
( into docker > sh/bash )
ifconfig
( or outside, from host )
sudo docker container inspect shaarli_e2jk | grep -i IPAddress
( or )
docker container inspect -f '{{ .NetworkSettings.Networks.shaarli_default.IPAddress }}' D_NAME
FINALY : CONNECT
ssh root@172.21.0.2 -p 22
PASSWORD
AUTOreSTART - OPENRC
- https://docs.alpinelinux.org/user-handbook/0.1a/Working/openrc.html
- https://www.linuxtricks.fr/wiki/openrc-les-commandes-essentielles (FR)
- https://wiki.gentoo.org/wiki/OpenRC_to_systemd_Cheatsheet
- https://www.cyberciti.biz/faq/how-to-enable-and-start-services-on-alpine-linux/
ex
Status
service sshd status
Redémarrer
service sshd restart
-- auto-restart (on host restart)
( rc-update add <service> <runlevel> )
rc-update add sshd
( not working for me )
-> temp. solution
sudo docker restart D_NAME
sudo docker inspect D_NAME -f "{{json .NetworkSettings.Networks.bridge.IPAddress }}"
AUTRES PISTES
C to C