User Tools

Site Tools


informatique:logiciels:ssh

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:logiciels:ssh [2021/11/05 07:27] – [Export display] xauth après un su/sudo pteuinformatique:logiciels:ssh [2024/04/05 06:59] (current) – [Transfert de fichier avec SCP] pteu
Line 99: Line 99:
  
  
 +=====Gérer des clés=====
 +
 +Pour générer une paire de clés sécurisées utiliser les valeurs par défaut :
 +<code bash>
 +$ ssh-keygen
 +</code>
 +Actuellement (en 2021) il est raisonnable d'utiliser au moins du chiffrement RSA 4096 bits (''-t rsa -b 4096''), et dans l'idéal du ED25519 (''-t ed25519'') qui utilise une variante de chiffrement par courbes elliptiques.
 +
 +Pour formater une clé publique au format RFC 4716 :
 +<code bash>
 +$ ssh-keygen -ef ~/.ssh/id_rsa -mRFC4716
 +---- BEGIN SSH2 PUBLIC KEY ----
 +Comment: "4096-bit RSA, converted by dude@technodrome from OpenSSH"
 +AAAAB3NzaC1yc2EAAAADAQABAAABAQCzU4exWqu4tsgWIJleq1AJ98cGHswD80cphWYOas
 +spBoOPgdv
 +[blabla sur quelques lignes]
 +15ukAsdfsdgg3h5f4h6dfh3fj84tK1
 +---- END SSH2 PUBLIC KEY ----
 +</code>
 +
 +Alternatives : convertir au format PEM ''-mPEM'' ou PKCS8 ''-mPKCS8''.
  
 ===== Se connecter sans mdp ===== ===== Se connecter sans mdp =====
Line 188: Line 209:
 ===== Transfert de fichier avec SCP ===== ===== Transfert de fichier avec SCP =====
  
-**Ssh CoPy** (SCP) est une commande qui permet de transférer des fichiers par une connexion SSH. +[[informatique:linux:commandes_linux#scp|commandes_linux:scp]]
-Sous Windows il existe les programmes ''pscp'' (en ligne de commande) et l'excellent [[http://fr.wikipedia.org/wiki/WinSCP|WinSCP]]. +
-Sous Linux, il est possible d'utiliser [[http://fr.wikipedia.org/wiki/GFTP|gFTP]] si l'on veut un interface graphique. +
-Sous Mac j'utilise [[http://rsug.itd.umich.edu/software/fugu/|Fugu]]+
- +
-La syntaxe est la suivante : +
-  scp fichier_local user@serveur.com:/path +
-Il faut noter qu'un //path// relatif (sans le "/") est par défaut la home de l'utilisateur sous lequel on s'est connecté (voir 1er exemple). +
- +
-exemple 1 : uploader //test.txt// (qui est un fichier local) dans la home de l'utilisateur toto sur //serveur.com//+
-  scp test.txt toto@serveur.com: +
- +
-exemple 2 : télécharger dans le répertoire courant (.) //test.txt//, qui se trouve sur //serveur.com// +
-  scp toto@serveur.com:test.txt . +
- +
-exemple 3 : uploader l'intégralité (récursivement avec //-r//) du sous-répertoire test du répertoire courant vers le sous répertoire incoming de la home de l'utilisateur toto de la machine serveur.com : +
-  scp -r test toto@serveur.com:incoming +
- +
-Les paramètres disponibles sont : +
-  * ''-P port'' pour préciser un port spécifique +
-  * ''-r'' pour les transfert récursifs (copier le contenu d'un dossier par exemple) +
- +
 =====Tunnels SSH===== =====Tunnels SSH=====
  
Line 373: Line 372:
 Lorsqu'une connexion telnet est bloquée, on peut taper une séquence d'échappement qui permet de sortir de telnet et récupérer la main sur son terminal : ''Ctrl °'' (le ''°'' se saisit avec ''AltGr'' + '')'' ) (souvent suivi de ''quit''). Lorsqu'une connexion telnet est bloquée, on peut taper une séquence d'échappement qui permet de sortir de telnet et récupérer la main sur son terminal : ''Ctrl °'' (le ''°'' se saisit avec ''AltGr'' + '')'' ) (souvent suivi de ''quit'').
  
-La même avec le client SSH est : ''<enter>'' ''~'' ''.'' ; elle permet de quitter le client SSH et rendre la main avec le terminal.+La même avec le client SSH est : ''~.'' (''<Enter>~ + .''; elle permet de fermer la connexion et de rendre la main sur le terminal.
  
 =====Saisir un mot de passe via SSH===== =====Saisir un mot de passe via SSH=====
Line 521: Line 520:
 </code> </code>
  
-ou, plus pérenne, dans le fichier de préférences du client SSH :+Ou, plus pérenne, dans le fichier de préférences du client SSH : 
 +<code bash ~/.ssh/config> 
 +Host upgrayedd 
 +  KexAlgorithms +diffie-hellman-group1-sha1 
 +</code> 
 + 
 +Dans mon cas j'avais également ce paramètre qui bloquait : 
 +<code bash> 
 +ssh admin@upgrayedd 
 +Unable to negotiate with 10.0.2.240 port 22: no matching host key type found. Their offer: ssh-dss 
 +</code> 
 <code bash ~/.ssh/config> <code bash ~/.ssh/config>
 Host upgrayedd Host upgrayedd
   KexAlgorithms +diffie-hellman-group1-sha1   KexAlgorithms +diffie-hellman-group1-sha1
-  # dans mon cas je doit aussi ajouter ça : 
   HostKeyAlgorithms +ssh-dss   HostKeyAlgorithms +ssh-dss
 </code> </code>
Line 545: Line 554:
 ssh -1 vieille-croute ssh -1 vieille-croute
 </code> </code>
 +
 +=====Connexion en arrière-plan=====
 +
 +Dans certains cas il peut être utile de lancer la connexion SSH en background, ce qui permet au terminal de rendre la main tout en conservant la connexion active. Cela se fait avec l'option ''-f'' :
 +<code bash>
 +ssh -f host xterm
 +</code>
 +
 +Pour faire une redirection de port, il faut ajouter ''-N'' pour préciser que l'on n'exécute aucune commande distante :
 +<code bash>
 +# sans -N
 +ssh -f -L 5901:127.0.0.1:5901 <host>
 + Cannot fork into background without a command to execute.
 +
 +ssh -f -N -L 5901:127.0.0.1:5901 <server>
 +</code>
 +
 +Et si l'on veut fermer la connexion après utilisation ? On ne peut pas, fallait réfléchir avant.
 +
 +Bon, en fait, il suffit de killer le process SSH qui écoute sur le port redirigé localement, sur le client :
 +<code bash>
 +kill -9 $(ss -lnpt | awk ' $4 ~ /:5901$/ {sub(/.*pid=/,"",$6); sub(/,.*$/,"",$6); print $6}')''
 +</code>
 +
 +Mais openssh permet de faire les choses proprement, de (au moins) 2 manières :
 +  - ne pas utiliser ''-N'', et lancer la commande ''sleep 60''. Cela a pour effet de maintenir le tunnel ouvert 60 secondes, et si aucune connexion ne l'utilise au bout de cette durée, de fermer le tunnel. En revanche, si une appli utilise le tunnel (par exemple un ''vncviewer127.0.0.1:5901:1''), alors le client SSH attend la fermeture de cette dernière (= la libération du tunnel) puis ferme le tunnel.
 +  - utiliser une connexion SSH en mode "master", qui permet d'utiliser un socket (fichier) de contrôle pour lui envoyer une commande de fermeture de connexion (exit) :
 +<code bash>
 +ssh -f -N -M -S <path-to-socket> -L 5901:127.0.0.1:5901 <server>
 +# (utilisation de la connexion...) puis fermeture :
 +ssh -S <path-to-socket> -O exit <server>
 +</code>
 +
 +source: [[https://unix.stackexchange.com/questions/83806/how-to-kill-ssh-session-that-was-started-with-the-f-option-run-in-background|How to kill SSH session that was started with the -f option (run in background) ?]] sur StackExchange
 +
 +
 +=====Connexion forcée par mot de passe=====
 +
 +Pour forcer l'authentification par mot de passe (afin d'éviter un "failed login" avec une mauvaise clé publique par exemple), lancer le client SSH avec l'option ''PreferredAuthentications=password'', afin de privilégier l'authentification par mot de passe (par défaut l'ordre de préférence est "gssapi-with-mic, hostbased, publickey, keyboard-interactive, password") ; il faut vérifier que cette option ne soit pas désactivée sur le serveur.
 +
 +On peut l'agrémenter de ''PubkeyAuthentication=no'' afin de désactiver l'auth par clé publique (idem pour les autres modes d'authentification).
 +
 +<code bash>
 +ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no <SERVER>
 +</code>
 +
 +Ces options peuvent se positionner dans le fichier de conf : **~/.ssh/config** pour ne pas avoir à les saisir à chaque fois.
 ====== Liens ====== ====== Liens ======
  
 [[http://people.via.ecp.fr/~alexis/formation-linux/export-display.html|formation Linux]] [[http://people.via.ecp.fr/~alexis/formation-linux/export-display.html|formation Linux]]
informatique/logiciels/ssh.1636097240.txt.gz · Last modified: 2021/11/05 07:27 by pteu