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
Wormhole lets you share files with end-to-end encryption and a link that automatically expires.
Un outil de transfert de fichiers /Privacy by design/
Lire aussi leur FAQ pour s'en convaincre !
Du /end-to-end encryption/ sans clefs gardées par le fournisseur de ce service.
Une version #cli_bash très utile pour envoie de #fichiers via #SSH !
Nous fera effectivement penser à onionshare
à test aussi https://gitlab.com/timvisee/ffsend #todo
Une VM (/quickemu/) MacOS avec #Docker
https://github.com/sickcodes/Docker-OSX
+ astuces add memory
-e RAM=8
source
+ ....
https://github.com/sickcodes/osx-optimizer
Tutos
-> Howto
https://github.com/sickcodes/Docker-OSX#additional-boot-instructions-for-when-you-are-creating-your-container
-> Tuto
https://dev.to/gombosg/running-macos-inside-linux-with-docker-osx-4e1i
+ Xcode + iOS simulator + SSH
https://dev.to/ianito/how-to-emulate-ios-on-linux-with-docker-4gj3
Android VM w/ /Quickemu/
. . .
Explications
Docker ≠ VM
. . . oui on peut installer un système dans un Docker...
. . . avec /Qemu/ .... qui virtualise le système OSx (VM)
. . . le Container va ici pré-configurer l'installation de /Qemu/
. . . et télécharger l'img du système
Alors c'est quoi la différence entre VM et Docker ?
VM = Virtual Machine
Chemin ( Linux /VS/ Docker Containers )
Á l'écriture de {cette} bulle je me mélangeais un peu les pinceaux,
je commençais tout juste à basculer vers #Docker
Au sein d'un même système Linux, sur ma Raspberrypi..
je comprends assez bien..
les interactions entre logiciels installés pêle-mêle
tous inter-dépendants / de vulnérabilités (allongeant la chaîne de risques).
ex/ de /Faker/ :
https://liens.vincent-bonnefille.fr/?-YFRMg
Les app installées pour qu'un site web fonctionne communiquent par des ports avec le reste du monde, le web !
Elles sont chargées simultanément, ce qui peut devenir compliqué à gérer.
Avec Docker, chaque application/projet démarre dans son propre système (linux) avec les variables et dépendances nécessaires à son déploiement/installation.., sans nécessairement avoir de relation avec les autres application/projet.
: les app sont séparées dans leur propre environnement
: des "Containers"
C'est + propre, + facile à mettre à jour...
Courbe d'apprentissage
Éviter #Docker dans ma phase d'apprentissage m'a permis de comprendre tout un spectre de problèmes inhérents à la mise en production (ex : port forward/ NAT.PAT ; d.dns ; loging et autres maintenances).
: Docker rend industrialisable un déploiement que j'ai eu le temps et plaisir de faire de façon artisanale !
Limites
Le fait que les Containers soient isolés rend parfois difficile la modification de leurs contenus.
On peut utiliser #SSH .. j'ai essayé de faire comme ca :
Si on veut bidouiller à l'intérieur, on se trouve embêter à chaque pull de mise à jour (de la part du développeur du logiciel). On est aussi limité avec des outils de base : comme on l'a dit, ces systèmes viennent souvent avec le minimum vital.
Monter des volumes -- comme si c'était un serveur distant -- pour travailler ses données avec les outils locaux -- habituels dans mon quotidien -- est compliqué.
- https://github.com/plesk/docker-fs est instable (Fuse se déconnecte)
- https://blog.px.dev/container-filesystems/
- https://martinheinz.dev/blog/44
... en recherche d'alternatives / solutions
... voir d'un alt. à Docker :
https://medium.com/nttlabs/containerd-and-lima-39e0b64d2a59
VM
Un container Ce n'est pas lourd comme une VM.
Petite video bien faite a ce sujet.
https://youtu.be/J0NuOlA2xDc
Une VM vient simuler l'intégralité des composants d'un ordinateur, une carte vidéo, une carte mère, son, un processeur, etc
L'application qui crée et lance la VM va démarrer un ordinateur dans votre ordinateur !
On prenait /Quemu/ et MacOSX en ex/ au début de cette {bulle}
{ Bulle } d'origine :::
Non VM
- https://alternativeto.net/software/distrobox/
- https://alternativeto.net/software/lxc-linux-containers/
( l'intérêt ici c'est d'avoir les avantages d'autres distributions sans l'imulation de tout un système -- mémoire / GPU / CPU == plus léger, intégrable, #linux first )
... me fait plus penser à de la virtualisation ou à https://www.dosbox.com !
... mais sans doute rien à voir ( je mets juste ici des pistes )
/VS/ VM
- https://github.com/quickemu-project/quickemu (dont MacOSX )
- https://www.osboxes.org/virtualbox-images/
- https://www.linuxvmimages.com (non testé)
- https://bitnami.com/stacks/virtual-machine
( dont env. MYSQL / LAMP + #Docker )
Remarque
De nombreux systèmes proposent des VM prêtes au téléchargement
Docker #GUI #linux
Pour une gestion #GUI j'ai test https://www.portainer.io
puis https://podman.io
( et https://podman-desktop.io )
. Il y aussi https://cockpit-project.org
. ( gestion #linux dans un Web #GUI .. )
. . ( intégration de /Podman/, #VM ... )
. Au sujet de #Docker / Podman
( / Kubernetes ), un article sur...
https://www.lemondeinformatique.fr
/Wetty/ sert à accéder à un terminal de commandes ( #cli_bash ) via le protocole #SSH ...
mais en passant par le wwweb (via n'importe quel #navigateur ) !
Normalement on se connect avec le protocole #SSH via un terminal (application)
ssh user@adresse_du_serveur_ou_son_IP
<
Sur un wifi public (ou protégé) certain #admin empêchent l'accès au port :22
(SSH)
Aussi, en passant par le web ( port :80
) on peut contourner cette limitation...
Pratique quand on veut accéder sans délais à son serveur distant !
- https://computingforgeeks.com/run-linux-terminal-on-web-browser-using-wetty/
Full #tuto - https://distroid.net/linux-terminal-using-wetty/
. . .
En remplaçant de /Shell in a box/ ( discontinued )
OpenSSH Full Guide - Everything you need to get started! https://www.youtube.com/watch?v=YS5Zh7KExvE
[ INVIDIOUS = https://yewtu.be/watch?v=YS5Zh7KExvE ]
" OpenSSH is the tool of choice for managing Linux installations remotely - and is indispensable in DevOps, Cloud, System Administration, Hosting, and more. "
Prises de notes temporaires
https://bulle.vincent-bonnefille.fr/s/privatebin/?1596229ee836588c#sFUkFpaviX9ffgqFxTp6ApptobgnzDVocCU1MVVAwRk
Une vidéo complémentaire ( se connecter depuis le client sous Windows avec Putty )
https://invidious.fdn.fr/watch?v=bfwfRCCFTVI
( oui je sécurise un peu plus mon serveur )
( la base, mieux gérer la connexion-accès )
"Firefox a annoncé un nouveau partenariat avec NextDNS pour fournir aux utilisateurs de Firefox des services privés et sécurisés de DNS (Domain Name System) via son programme Trusted Recursive Resolver."
... note que Cloudflare est de la partie 1.1.1... lire à ce sujet https://www.nextinpact.com/article/30142/108783-dns-over-https-pour-stephane-bortzmeyer-diable-est-dans-details
Youpi un nouveau DNS sécurisant avec filtres anti-pubs/trakers/porn...
avec du DoH / DoT pour crypter ce qui passe dans les tuyaux
( au niveau du DNS qui convertit mon adresse URL lisible et mémorisable,
un nom de domaine, en adresse IP unique sur le réseau
attribuée à une machine_serveur et ses données (pages du site demandé) )
Je cherchais un DNS avec filtre anti-pub intégré (à la place du bon Adaway) #ads_tracking pour mettre sur mon Android à l'aide de Nebulo 💖
... et NextDNS fait la pub pour handshake dont leur service propose de résoudre (nous permettant d'y acéder) (joie)
... NextDNS qui est donc un autre DNS décentralisé prométant monts et merveille avec son token magique ... pour moi c'est, encore une fois, la possiblité d'accéder à des lieux autrement impossibles. Des heures de bidouille qui s'ouvrent à moi, de compromis (temporaires), d'acharnement numérique. #todo
Vennant concurencer le DNS de Google, CloudFlare, Quad9...
Des services qui ont ainsi acces à nos requêtes DNS...
L'attribution d'adresses URL, de noms de domaines est centrale dans le dévellopement d'une existance en ligne.
C'est l'un des derniers endroits par lesquels je suis dépendant d'une hébergeur comme OVH pour acheter et renouveller ma propriété sur le nom de domaine "vincent-bonnefille.fr". ( un frien dans mon projet #self_host_hébergement )
Je dois passer par un Registar.
La plupart de "darknets" viennent avec une modalité de résolution de leurs adresses URL spécifiquement accessibles par leur protocol. Des TLD exotiques... comme autant de portes à pousser.
Lokinet .loki
Tor .onion
i2p .eepsite
data .dat
les dht: de #dn_ScuttleButt ...
à partir de l'identification unique sur le réseau de vortre machine une adresse lui est attribuée et elle devient ainsi joignable (ce qui lui permet d'afficher un site web ou tout autre chose)
Bref un nouveau #dns c'est un retour aux sources et à mes premières lectures de recherche
(intéressé au perfectionement technique par la critique de l'existant, dépassé, perfectible...
autant que par les processus de crétaion eux même { à l'origine de normes informatiques et d'autre nature })
...
parmis ces lectures, un petit bonbon :
Cooking With Onions: Names for your onions | Tor Blog #2017 💖
https://blog.torproject.org/cooking-onions-names-your-onions
https://liens.vincent-bonnefille.fr/?geTQFQ #référence
...
Hadshake, m'a fait pensé à :
NOIA-net par Syntropynet (qui se présente comme une solution blockchaine pour les BGP (qui sevent à trouver le chemin le plus court entre deux machines en réseau, via Internet))
https://liens.vincent-bonnefille.fr/?u2e5KA
"Handshake" #glossaire_notion
https://www.encirca.com/your-guide-to-handshake-crypto/
https://medium.com/tokendaily/handshake-ens-and-decentralized-naming-services-explained-2e69a1ca1313
... littéralement "serrage de main" ou "établissement d'une liaison", initie la rencontre entre deux machnines wiki, c'est le cas lors d'une connexion #ftp ou encore #ssh ...
...
#fun : "Epic Handshake" avec Arnold Schwarzenegger dans Predator de 1987.
...
/HandShake/ c'est aussi :
" Decentralized naming and certificate authority
An experimental peer-to-peer root naming system. " #P2P #DNS
Suite à une exposition de mon travail vidéo je me suis confronté à certaines limites d'accès à mon Raspberrypi.
En déplacement mon micro-ordinateur se retrouve sans écran.
Je n'ai pas d'yeux pour m'y connecter, d'interface.
Je suis habitué à passer par l'interface de ligne de commandes #cli_bash en #ssh par le réseau local (LAN)
(ou même à distance ( par Internet ) si je connais l'adresse IP de connexion de ma raspberrypi ou son URL/nom de domaine qui s'y rattache)
Mais là, pas de réseau intermédiaire entre mon micro-ordinateur sans tête ("headless") et un terminal distant par lequel y accéder et afficher le contenu / commander.
Coupée du monde mon raspberrypi tourne seul et je n'ai que peu de signes de vie (une LED et température).
Pour y remédié plusieurs solutions.
J'ai fais avec ce que j'avais sous la main : une carte-micro permettant de créer un réseau Wifi (hotspot) auquel je connecte l'ordinateur sans tête et le terminal.
Une Onion Omega 1.0
Je crée ainsi un réseau wifi par lequel je me connecte en SSH à mon micro-ordi.
Onion Omega permet aussi de partager une connexion Wifi existante (avec ou sans mot de passe).
Et l'une des autres solutions c'est de se connecter directement à la Raspberry pi en USB via son port Serial.... d'où cette bulle_lien !
D'autres solutions plus couteuses, moins légères :
https://www.youtube.com/watch?v=nui8kXvUAys
( HDMI Converter to USB )