Ssh entre poste et HAOS

Bonjour,

j’ai décidé de sécuriser un peu mon installation.

je veux pouvoir me connecter en ssh de mon PC sur mon HAOS
avant j’avais un ssh peu configuré, ca marchait en user/mot de passe et basta.
je viens d’installer Advanced SSH & Web Terminal et il faut qu’il soit mieux sécurisé.

mais je n’ai jamais bossé avec des clés.

j’ai un poste sous windows 11 avec un répertoire ~.ssh avec un fichier known_hosts
et j’ai trouvé le répertoire /data/.ssh sur mon Raspberry Pi

j’ai les commandes ssh-keygen des deux cotés mais je suis paumé entre les clefs, publiques/privées, celles qu’on donne et celles qu’on garde…
comment établir la connexion du pc sur le linux ?
est ce que ca marchera encore après le prochain update HAOS ?
mes compétences date d’un temps où le user/password était roi, même sous Transpac
et par là même , comment je paramètre la glute à Frenk ?

ssh:
  username: hassio
  password: ""
  authorized_keys: []
  sftp: false
  compatibility_mode: false
  allow_agent_forwarding: false
  allow_remote_port_forwarding: false
  allow_tcp_forwarding: false
zsh: false
share_sessions: false
packages: []
init_commands: []

le ssh le meilleur des couteaux suisse numérique

Lorsque tu crée un paire de clé celle que tu gardes c’est la clé privée (d’où son nom) et celle que tu pose sur les serveur pour t’autoriser c’est la clé publique (toujours assez logique)
Donc tu copies ta clé publique dans le fichier authorized_keys quinze trouves la plupart du temps dans /home/USER/.ssh (ou /root/.ssh/ pour root) ce fichier doit être uniquement lisible par l’utilisateur (chmod 600)

Après penser à désactiver l’authentification par mot de passe dans le serveur ssh

C’est finlandais :rofl:

Ok, je sors

2 « J'aime »

Ok, donc la privée, je la génère sur mon Home Assistant
et je met la publique sur mon pc ?

Non c’est le contraire

Les clés tu peux les générer ou tu veux va n’a aucune importance
Mais tu laisse sur le serveur que ta clé publique dans le fichier authorized_keys

La clé privée tu la garde avec toi pas sur le(s) serveur(s)

Salut

Presque, la clé privée il faut quand même la garder bien au chaud pour le proprio uniquement.
La rendre lisible pour autrui, ça revient à donner son mot de passe.

Bonjour @bentou
Au taf j’utilise Putty Gen pour générer les clés, la privée sous Windows est dans le dossier C:\Users\monNom\.ssh et la publique est déposée sur le serveur
Putty gen te permet d’ajouter en plus de la clé un mot de passe.
Bob

C’est exactement ce que j’ai dit mais tu as raison de bien souligner que la clé privée doit le rester

1 « J'aime »

sur mon poste:

C:\Users\bento\>ssh-keygen.exe
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\bento/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\bento/.ssh/id_rsa
Your public key has been saved in C:\Users\bento/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:jIcIEdMwC1TejjQUtz5F2w14wM3yQqGHTgxtoQ1ujnN bento@benoit
The key's randomart image is:
+---[RSA 3072]----+
|.=*.      .+o=.  |
|  .u+  . .  +.+o.|
| .oE o. = .. o..o|
|  .o . * + .=..  |
|   . = S +.+ +   |
|     o = * +..   |
|      + + o.     |
|          o.     |
|          ..     |
+----[SHA256]-----+

C:\Users\bento>dir .ssh
21/05/2024  17:18             2 602 id_rsa
21/05/2024  17:18               567 id_rsa.pub
21/05/2024  17:18             7 871 known_hosts
C:\Users\bento>copy .ssh\id_rsa.pub \\192.168.92.25\config\temp
        1 fichier(s) copié(s).
~ $ ls -l /config/temp
total 8
-rwxr--r--    1 root     root           567 May 21 17:18 id_rsa.pub
drwxr-xr-x    5 root     root          4096 May 21 10:31 ssh-audit-master

.ssh $ cat  /config/temp/id_rsa.pub >> ~/.ssh/authorized_keys 
.ssh $

mais maintenant, c’est quoi que je met dans le fichier de conf ?
parceque j’ai tapé

C:\Users\bento\.ssh>ssh hassio@192.168.92.25
The authenticity of host '192.168.92.25 (192.168.92.25)' can't be established.
ED25519 key fingerprint is SHA256:9pT2cVEXjkmh9HwGTakS6iZYOHB9ynqb4NzkSzTWA1w.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.92.25' (ED25519) to the list of known hosts.
Corrupted MAC on input.
ssh_dispatch_run_fatal: Connection to 192.168.92.25 port 22: message authentication code incorrect

C:\Users\bento\.ssh>

avec ca comme log…

[17:54:55] INFO: Starting the ttyd daemon...
[17:54:55] INFO: Starting the SSH daemon...
Server listening on 0.0.0.0 port 22.
Server listening on :: port 22.
s6-rc: info: service legacy-services successfully started
Connection from 192.168.92.10 port 48652 on 192.168.92.25 port 22 rdomain ""
kex_exchange_identification: Connection closed by remote host
Connection closed by 192.168.92.10 port 48652

Tu dois coller le contenu de ta clé publique ici

bon, impossible à faire marcher, même en mettant les 2 cles de chaque coté
j’ai tout viré des 2 coté
j’ai réinstallé le ssh pour mickey
même sans aucune clef, il me rempli le fichier known_hosts du poste:
image

je lâche l’affaire…

On a jamais parlé du fichiers known_hosts mais authorized_keys le known_host c’est le fichier de signature des hosts pas des utilisateurs

mais mes répertoires .ssh sont 100% vide… où mon ssh va chercher ces 3 lignes ?

Ce sont les hôtes que tu reconnais lorsque tu te connecte pour la première fois il te demande de valider l’empreinte du serveur sur lequel tu te connectes

A l’époque ou j’ai configurer mon accès SSH j’avais fais une note pour mieux comprendre moi-même comment tout cela fonctionne. Je la poste ici mais n’hésitaient pas à me corriger peut etre que j’avais mal compris tout ca.
En tout cas, je n’y ais pas toucher depuis et ca fonctionne toujours chez moi ^^

-Pour configurer le SSH il faudra creer une paire de clé SSH
	Elles seront placé par défaut à cat emplacement
	Dans Windows		Clé utilisateurs	C:\Users\USER\.ssh
	     				Clé Root		    C:\ProgramData\ssh
	Dans HomeAssistant	Clé Utilisateurs	/root/.ssh
		        		Clé Root		    /etc/ssh
    Dans OSX            Clé Utilisateurs    /Users/USER/.ssh
                        Clé Root            /private/etc/ssh

-Pour autoriser de manière permanante le client a se connecter au serveur
sans authentifications, il faudra entrer la clé public du client 
dans le fichier authorized_keys du serveur à cet emplacement
		Dans Windows C:\Users\USER\.ssh\authorized_keys
		Dans HomeAssistant /root/.ssh/authorized_keys
        Dans OSX /Users/USER/.ssh/authorized_keys
	
-Le fichier known_hosts, lui, indiquera la liste des hotes qui se sont 
deja connecter sur le serveur à cet emplacement.
      Il contient la CLE PUB de la machine sur lequel on se connecte.
      Ainsi lors de la connexion il y a une verification dans les deux sens.
              EXEMPLE de connexion du HomeAssistant vers PC
              HomeAssistant se connect en utilisant sa cle privee.
              PC verifie la presence de la cle public dans authorized_keys.
              En reponse PC envoit au HomeAssistant sa cle prive
              qui verifie si sa public est bien dans known_hosts
              et correspond a la bonne IP
		Dans Windows C:\Users\USER\.ssh\known_hosts
		Dans HomeAssistant /root/.ssh/known_hosts
        Dans OSX /Users/USER/.ssh/known_hosts

# ENTRER DANS HomeAssistant EN SSH depuis OSX/Win
ssh user@192.168.X.XX
# ENTRER DANS Win EN SSH depuis HomeAssistant
ssh user@192.168.X.XX

Hello,

une question, enfin non, plusieurs…

soit la clef publique suivante:
ssd-ed25519 AAAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx uuu@hhh

avec le x qui est l’ensemble de lettres maj/min de la clef en elle même,
uuu pour le user,
hhh pour le host.

la clef publique qu’on rentre dans known_hosts du serveur de destination
c’est bien l’ensemble des 3 champs et user@host ?

le user et le host doivent correspondre à quelque chose de précis ?
au niveau du serveur ?
au niveau de client ?

la clef publique doit se trouver sur le serveur distant.
la clé privée doit se trouver où ?
sur le client ?
sur le serveur ?
sur une clef usb au coffre ?

si on a une clef privée, peut on générer plusieurs clef publiques, pour plusieurs serveurs ou on met la meme clef partout ?

C’est un commentaire il n’a aucun intérêt ça sert juste a identifier la clé

Sur le serveur tu ne copie que ta clé publique dans le fichier authorized_keyset surtout pas ta cle privée celle là tu la garde sur ton client pour te connecter avec

Oui une seule clé publique par clé privée
Après tu peux générer ou plusieurs paire de clés si tu veux

Parfait.
en fait, je me demandais si la clef privée pouvait etre retirée du client, une fois la connexion effectuée et validée avec le serveur. la réponse est non.

j’arrive à me connecter en ssh avec la passphrase sur mon HA.
mais uniquement avec l’add-on ssh ‹ standard ›
impossible de faire fonctionner le ‹ advanced ssh ›.

j’ai ca comme log:

s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service base-addon-log-level: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service base-addon-log-level successfully stopped
s6-rc: info: service base-addon-banner: stopping
s6-rc: info: service base-addon-banner successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service base-addon-banner: starting

-----------------------------------------------------------
 Add-on: Advanced SSH & Web Terminal
 A supercharged SSH & Web Terminal access to your Home Assistant instance
-----------------------------------------------------------
 Add-on version: 17.3.0
 You are running the latest version of this add-on.
 System: Home Assistant OS 12.3  (aarch64 / raspberrypi5-64)
 Home Assistant Core: 2024.5.4
 Home Assistant Supervisor: 2024.05.1
-----------------------------------------------------------
 Please, share the above information when looking for help
 or support in, e.g., GitHub, forums or the Discord chat.
-----------------------------------------------------------
s6-rc: info: service base-addon-banner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service base-addon-log-level: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service base-addon-log-level successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service init-ssh: starting
s6-rc: info: service init-mysql: starting
s6-rc: info: service init-mosquitto: starting
s6-rc: info: service init-docker: starting
s6-rc: info: service init-docker successfully started
s6-rc: info: service init-mysql successfully started
[20:32:44] WARNING: 
[20:32:44] WARNING: Logging in with "root" as the username,
[20:32:44] WARNING: is security wise a bad idea!
[20:32:44] WARNING: 
[20:32:44] WARNING: Most attacks against SSH are attempts to login
[20:32:44] WARNING: using the "root" username.
[20:32:44] WARNING: 
[20:32:44] NOTICE: RSA host key missing, generating one...
s6-rc: info: service init-mosquitto successfully started
Generating public/private rsa key pair.
Your identification has been saved in /data/ssh_host_rsa_key
Your public key has been saved in /data/ssh_host_rsa_key.pub
The key fingerprint is:
SHA256:Od98xLBbS1h9HE7hNzMTN4DecL9KU4q45wqVufCIzdQ root@a0d7b954-ssh
The key's randomart image is:
+---[RSA 3072]----+
|            ...*o|
|           o .+o=|
|          . = oB=|
|        ..o. B oB|
|       oSE. + B .|
|      = =+.+ O o |
|     . = oo = =  |
|        .. . o   |
|         .+.     |
+----[SHA256]-----+
[20:32:44] NOTICE: ED25519 host key missing, generating one...
Generating public/private ed25519 key pair.
Your identification has been saved in /data/ssh_host_ed25519_key
Your public key has been saved in /data/ssh_host_ed25519_key.pub
The key fingerprint is:
SHA256:C2lclQ3JNN7G2WkjXpT2f6sHkx4JesR7tMAUhs62ddQ root@a0d7b954-ssh
The key's randomart image is:
+--[ED25519 256]--+
|         o=B+.   |
|         oOO.    |
|        .*.oO . .|
|     . oo *=o+o.E|
|      = So.+o=oo |
|     . . .  =.* o|
|        .    B =.|
|            o +  |
|             .   |
+----[SHA256]-----+
s6-rc: info: service init-ssh successfully started
s6-rc: info: service init-user: starting
[20:32:45] NOTICE: Session sharing has been disabled!
s6-rc: info: service init-user successfully started
s6-rc: info: service ttyd: starting
s6-rc: info: service sshd: starting
s6-rc: info: service ttyd successfully started
s6-rc: info: service sshd successfully started
s6-rc: info: service legacy-services: starting
[20:32:45] INFO: Starting the ttyd daemon...
[20:32:45] INFO: Starting the SSH daemon...
Server listening on 0.0.0.0 port 22.
Server listening on :: port 22.
s6-rc: info: service legacy-services successfully started
Connection from fe80::7e39:a528:180c:11d9%end0 port 39715 on fe80::3bba:bcd9:40f7:a749%end0 port 22 rdomain "end0"
Connection reset by fe80::7e39:a528:180c:11d9%end0 port 39715 [preauth]
Connection from fe80::7e39:a528:180c:11d9%end0 port 39768 on fe80::3bba:bcd9:40f7:a749%end0 port 22 rdomain "end0"
Connection reset by fe80::7e39:a528:180c:11d9%end0 port 39768 [preauth]

et ca comme config. (root c’est temporaire)

username: root
password: ""
authorized_keys:
  - >-
    ssh-ed25519
    AAAAC1NTE5AAAAIA7rE0FqlSEz6wX6isIQlYg18GeV4vVUl+qAuMgqiQ3NzaC1lZDIJS
    bento@benoit
sftp: false
compatibility_mode: false
allow_agent_forwarding: false
allow_remote_port_forwarding: false
allow_tcp_forwarding: false

et ca c’est mon client:

C:\Users\bento>ssh root@homeassistant.local
Corrupted MAC on input.
ssh_dispatch_run_fatal: Connection to fe80::3bba:bcd9:40f7:a749%3 port 22: message authentication code incorrect

C:\Users\bento>

La réponse est oui elle ne sert qu’à la phase de connexion et ne pas oublier d’y mettre un mot de passe sérieux rien de rocambolesque non plus

Tes deux add on tournent bien sûr 2 ports différents tu ne peux pas faire tourner 2 services sur le même port :wink: