informatique:logiciels:ssh
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
informatique:logiciels:ssh [2009/06/08 20:15] – édition externe 127.0.0.1 | informatique:logiciels:ssh [2024/11/26 09:10] (current) – [SSH Keepalive] pteu | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | {{tag> | ||
- | |||
====== SSH ====== | ====== SSH ====== | ||
//recueil d' | //recueil d' | ||
Line 8: | Line 6: | ||
- | ===== Configuration du serveur ===== | + | ====== Configuration du serveur |
- | | + | <code bash> |
+ | aptitude install openssh-server | ||
+ | </ | ||
| | ||
Le fichier de configuration ''/ | Le fichier de configuration ''/ | ||
- | | + | <code bash> |
- | PermitRootLogin no | + | # désactivation du login pour le compte root |
- | # limiter les connexions au seuls utilisateurs toto, et titi depuis la machine 1.2.3.4 | + | PermitRootLogin no |
- | AllowUsers toto titi@1.2.3.4 | + | # limiter les connexions au seuls utilisateurs toto, et titi depuis la machine 1.2.3.4 |
- | + | AllowUsers toto titi@1.2.3.4 | |
- | # on n' | + | |
- | AllowGroup ssh_users | + | |
- | + | ||
- | # on veut que le serveur écoute sur un port supplémentaire | + | |
- | Port 22 2222 | + | |
- | + | ||
- | # Limiter les tentatives de login à 5 | + | |
- | MaxAuthTries 5 | + | |
- | + | ||
- | # bon, là ça rentre en conflit avec la directive ci-dessus mais c'est pour l' | + | |
- | # 10 tentatives de connexion simultanées max ; puis 30% de refus : puis 100% à la 15e | + | |
- | MaxStartups 10:30:15 | + | |
+ | # on n' | ||
+ | AllowGroup ssh_users | ||
- | On (re)lance | + | # on veut que le serveur écoute sur un port supplémentaire |
- | / | + | Port 22 2222 |
+ | # Limiter les tentatives de login à 5 | ||
+ | MaxAuthTries 5 | ||
+ | |||
+ | # bon, là ça rentre en conflit avec la directive ci-dessus mais c'est pour l' | ||
+ | # 10 tentatives de connexion simultanées max ; puis 30% de refus : puis 100% à la 15e | ||
+ | MaxStartups 10:30:15 | ||
+ | |||
+ | # pour partager une redirection de port avec n' | ||
+ | # en gros la redirection se fait sur 0.0.0.0:x et non plus 127.0.0.1:x donc elle redirige tous | ||
+ | # les paquets arrivant sur son port x, pas seulement ceux en provenance de ma connexion SSH | ||
+ | GatewayPorts yes | ||
+ | </ | ||
+ | |||
+ | On (re)lance le service : | ||
+ | <code bash> | ||
+ | / | ||
+ | </ | ||
- | ==== Mep d'une bannière ==== | + | ===== Mep d'une bannière |
Par défaut la bannière qui est utilisée est le contenu du fichier ''/ | Par défaut la bannière qui est utilisée est le contenu du fichier ''/ | ||
- | | + | <code bash> |
+ | banner <fichier> | ||
+ | </code> | ||
dans le fichier de conf. | dans le fichier de conf. | ||
- | ====Limitation d'une paire de clé==== | + | =====Limitation d'une paire de clé===== |
Pour ne permettre à un utilisateur s' | Pour ne permettre à un utilisateur s' | ||
- | | + | <code bash> |
+ | command=" | ||
+ | </ | ||
Dans le cas précédent, | Dans le cas précédent, | ||
- | ===== Utilisation du client ===== | + | =====Afficher la liste des paramètres===== |
+ | |||
+ | Ceci permet d' | ||
+ | <code bash> | ||
+ | sshd -T -C user=guest | ||
+ | </ | ||
+ | ====== Utilisation du client | ||
On l' | On l' | ||
- | | + | <code bash> |
+ | ssh -p < | ||
+ | </ | ||
- | Si c'est la première connexion SSH depuis ce client vers ce serveur, il vous demande si le fingerprint de la clé publique présentée par le serveur est bien le bon. Si c'est la bonne, répondez " | + | Si c'est la première connexion SSH depuis ce client vers ce serveur, il vous demande si le //fingerprint// de la clé publique présentée par le serveur est bien le bon. Si c'est la bonne, répondez " |
- | ==== Se connecter sans mdp ==== | + | =====Fichier ~/ |
+ | |||
+ | Pour éviter d' | ||
+ | |||
+ | Par exemple pour simplifier la commande : '' | ||
+ | <code bash> | ||
+ | cat ~/ | ||
+ | Host ex | ||
+ | Hostname exemple.fr | ||
+ | User toto | ||
+ | Port 2222 | ||
+ | DynamicForward 1025 | ||
+ | </ | ||
+ | |||
+ | Il suffit maintenant de saisir : | ||
+ | <code bash> | ||
+ | ssh ex | ||
+ | </ | ||
+ | ... pour se connecter au serveur. La liste exhaustive des paramètres est disponible dans le '' | ||
+ | |||
+ | |||
+ | =====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 | ||
+ | </ | ||
+ | Actuellement (en 2021) il est raisonnable d' | ||
+ | |||
+ | Pour formater une clé publique au format RFC 4716 : | ||
+ | <code bash> | ||
+ | $ ssh-keygen -ef ~/ | ||
+ | ---- BEGIN SSH2 PUBLIC KEY ---- | ||
+ | Comment: " | ||
+ | AAAAB3NzaC1yc2EAAAADAQABAAABAQCzU4exWqu4tsgWIJleq1AJ98cGHswD80cphWYOas | ||
+ | spBoOPgdv | ||
+ | [blabla sur quelques lignes] | ||
+ | 15ukAsdfsdgg3h5f4h6dfh3fj84tK1 | ||
+ | ---- END SSH2 PUBLIC KEY ---- | ||
+ | </ | ||
+ | |||
+ | Alternatives : convertir au format PEM '' | ||
+ | |||
+ | ===== Se connecter sans mdp ===== | ||
Sur la machine cliente : | Sur la machine cliente : | ||
* générer un couple de clé **rsa** : | * générer un couple de clé **rsa** : | ||
- | + | <code bash> | |
- | cd ~/.ssh | + | cd ~/.ssh |
- | ssh-keygen -t rsa | + | ssh-keygen -t rsa |
- | | + | |
- | | + | Enter file in which to save the key (/ |
- | | + | Enter passphrase (empty for no passphrase): |
- | | + | Enter same passphrase again: |
- | | + | Your identification has been saved in / |
- | | + | Your public key has been saved in / |
- | | + | The key fingerprint is: |
- | | + | |
+ | </code> | ||
**id_rsa** est la clé privée ; **id_rsa.pub** la clé publique | **id_rsa** est la clé privée ; **id_rsa.pub** la clé publique | ||
Line 80: | Line 143: | ||
* envoyer sa clé publique sur le serveur < | * envoyer sa clé publique sur le serveur < | ||
- | | + | <code bash> |
+ | ssh-copy-id | ||
+ | </ | ||
+ | |||
+ | ... ou moins simple en copiant à la main sa clé publique dans '' | ||
+ | <code bash> | ||
+ | cat ~/ | ||
+ | </ | ||
+ | |||
+ | NB : la commande **ssh-copy-id** ne gère pas plusieurs arguments (wtf ?!) ; donc, si le serveur SSH distant est sur un port autre que celui par défaut (tcp/22), vous devez passer les arguments entre " " ; exemple : | ||
+ | <code bash> | ||
+ | ssh-copy-id -i / | ||
+ | ssh: Could not resolve hostname 10.0.0.1: | ||
+ | |||
+ | ssh-copy-id -i / | ||
+ | ssh: Could not resolve hostname umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/ | ||
+ | |||
+ | # la solution : | ||
+ | ssh-copy-id -i / | ||
+ | </code> | ||
- | ou moins simple en copiant à la main sa clé publique dans '' | ||
- | cat ~/ | ||
On peut rencontrer des problèmes d' | On peut rencontrer des problèmes d' | ||
Pour interdire à cet utilisateur de lancer un shell, il faut ajouter '' | Pour interdire à cet utilisateur de lancer un shell, il faut ajouter '' | ||
- | | + | <code bash> |
- | no-pty ssh-dss AAAAB3NzaC..qxX/ | + | vi ~/ |
+ | no-pty ssh-dss AAAAB3NzaC..qxX/ | ||
+ | </ | ||
* si l'on utilise une passphrase, il faudra la saisir à chaque //ssh// qu'on fera. Pour ne pas avoir à la retaper à chaque fois, on utilise '' | * si l'on utilise une passphrase, il faudra la saisir à chaque //ssh// qu'on fera. Pour ne pas avoir à la retaper à chaque fois, on utilise '' | ||
- | + | <code bash> | |
- | eval ' | + | eval ' |
- | SSH_AUTH_SOCK=/ | + | SSH_AUTH_SOCK=/ |
- | SSH_AGENT_PID=5683; | + | SSH_AGENT_PID=5683; |
- | echo Agent pid 5683; | + | echo Agent pid 5683; |
- | ssh-add ~/ | + | ssh-add ~/ |
- | Enter passphrase for / | + | Enter passphrase for / |
- | Identity added: / | + | Identity added: / |
+ | </ | ||
On lance '' | On lance '' | ||
- | * pour plus de sécurité on peut restreindre l' | + | ====ssh-add==== |
- | cat authorized_keys | + | Cet outil sert à ajouter ou supprimer des identités (clés) au ssh-agent : |
- | | + | * pour lister toutes les identités déjà chargées : '' |
+ | * pour ajouter une nouvelle identité : ssh-add ~/.ssh/id_rsa-perso ; si lancé sans argument, il ajoutera ce qu'il trouve parmi les fichiers existants : '' | ||
+ | * pour supprimer une identité : '' | ||
- | Ici on filtre sur le sous-domaine stuff.net | + | Par défaut |
+ | <code bash ~/ | ||
+ | IdentitiesOnly yes | ||
+ | </ | ||
+ | Attention il faudra soit utiliser '' | ||
+ | * pour plus de sécurité on peut restreindre l' | ||
+ | <code bash> | ||
+ | cat authorized_keys | ||
+ | from=" | ||
+ | </ | ||
- | ==== Transfert de fichier avec SCP ==== | + | Ici on filtre sur le sous-domaine stuff.net |
- | **Ssh CoPy** (SCP) est une commande qui permet de transférer des fichiers par une connexion SSH. | ||
- | Sous Windows il existe les programmes '' | ||
- | Sous Linux, il est possible d' | ||
- | Sous Mac j' | ||
- | La syntaxe est la suivante : | + | ===== Transfert |
- | scp fichier_local user@serveur.com:/ | + | |
- | Il faut noter qu'un //path// relatif (sans le "/" | + | |
- | exemple 1 : uploader // | + | [[informatique:linux:commandes_linux# |
- | | + | =====Tunnels SSH===== |
- | + | ||
- | exemple 2 : télécharger dans le répertoire courant (.) // | + | |
- | | + | |
- | + | ||
- | exemple 3 : uploader l' | + | |
- | scp -r test toto@serveur.com: | + | |
- | + | ||
- | Les paramètres disponibles sont : | + | |
- | * '' | + | |
- | * '' | + | |
- | + | ||
- | + | ||
- | ====Tunnels SSH==== | + | |
Faire un tunnel SSH, c'est créer une connexion SSH pour y faire passer (encapsuler) des données de manière sécurisée. En lançant une connexion SSH depuis mon poste client vers serveurSSH.com, | Faire un tunnel SSH, c'est créer une connexion SSH pour y faire passer (encapsuler) des données de manière sécurisée. En lançant une connexion SSH depuis mon poste client vers serveurSSH.com, | ||
Line 165: | Line 239: | ||
- | ==== Back connexion ==== | + | ===== Back connexion |
Il existe un moyen de faire une back connexion, c'est à dire une redirection de requête via une autre machine. | Il existe un moyen de faire une back connexion, c'est à dire une redirection de requête via une autre machine. | ||
Line 179: | Line 253: | ||
- | ==== Export display ==== | + | ===== Export display |
L' | L' | ||
Line 185: | Line 259: | ||
Sur le serveur SSH, dans le fichier ''/ | Sur le serveur SSH, dans le fichier ''/ | ||
- | | + | <code bash> |
+ | X11Forwarding yes | ||
+ | </ | ||
Sur le client, qui doit être muni d'un serveur X : | Sur le client, qui doit être muni d'un serveur X : | ||
- | | + | <code bash> |
+ | ssh -X [-C] serveur | ||
+ | </ | ||
-X permet l' | -X permet l' | ||
Line 195: | Line 273: | ||
Pour les postes clients sous Windows, on peut passer par l' | Pour les postes clients sous Windows, on peut passer par l' | ||
Dans le cas de Cygwin/X : on le lance, on lance le serveur X | Dans le cas de Cygwin/X : on le lance, on lance le serveur X | ||
- | | + | <code bash> |
+ | startxwin.sh | ||
+ | </ | ||
Cela lance un xterm (et une icone dans la taskbar). Ensuite on procède comme normalement : | Cela lance un xterm (et une icone dans la taskbar). Ensuite on procède comme normalement : | ||
- | ssh -X serveur | + | <code bash> |
+ | ssh -X serveur | ||
+ | </ | ||
+ | |||
+ | ====Après un su/ | ||
+ | |||
+ | Le X11 ne passe pas les '' | ||
+ | <code bash> | ||
+ | # afficher le DISPLAY avant le sudo | ||
+ | echo $DISPLAY | ||
+ | | ||
+ | |||
+ | # afficher les xauth et copier la ligne qui correspond à notre DISPLAY (ici le ": | ||
+ | xauth list | ||
+ | [..] | ||
+ | serveur/ | ||
+ | |||
+ | # ajouter l' | ||
+ | sudo -i | ||
+ | xauth add serveur/ | ||
+ | |||
+ | xclock& | ||
+ | </ | ||
+ | =====Exécuter un script local sur le serveur distant===== | ||
+ | |||
+ | Pour cela, on lance la commande bash distante, en précisant le paramètre '' | ||
+ | <code bash> | ||
+ | ssh user@remoteserver 'bash -s' < script.sh | ||
+ | </ | ||
+ | |||
+ | Si le script n'est pas dans un fichier, on peut envoyer les commandes sur plusieurs lignes en usant d'un [[informatique: | ||
+ | <code bash> | ||
+ | ssh user@remoteserver 'bash -s' << EOF | ||
+ | hostname | ||
+ | pwd | ||
+ | EOF | ||
+ | </ | ||
+ | |||
+ | ====== Tips ====== | ||
+ | |||
+ | =====Stream audio over SSH===== | ||
+ | |||
+ | Stream audio over SSH : on transmet le fichier file.mp3 dans la connexion SSH ; le flux est lu par le logiciel mpg321 sur le serveur distant. | ||
+ | |||
+ | <code bash> | ||
+ | ssh [user]@[address] " | ||
+ | </ | ||
+ | |||
+ | =====Lister les options du ssh===== | ||
+ | |||
+ | Pour lister les paramètres effectifs avec lesquels se lance le démon **sshd** (c'est utile notamment pour voir la valeur des paramètres non spécifiés dans le fichier de configuration ''/ | ||
+ | <code bash> | ||
+ | sshd -T | ||
+ | </ | ||
+ | |||
+ | Côté client, on peut afficher les paramètres courants avec l' | ||
+ | <code bash> | ||
+ | ssh -G < | ||
+ | </ | ||
+ | =====Mode debug/ | ||
+ | |||
+ | Pour débugger une connexion SSH récalcitrante, | ||
+ | <code bash> | ||
+ | ssh -vv user@server | ||
+ | OpenSSH_5.3p1, | ||
+ | debug1: Reading configuration data / | ||
+ | debug1: Applying options for * | ||
+ | debug2: ssh_connect: | ||
+ | debug1: Connecting to server [10.1.1.51] port 22. | ||
+ | debug1: Connection established. | ||
+ | debug1: identity file / | ||
+ | [..] | ||
+ | </ | ||
+ | |||
+ | =====Lister les clés présentes===== | ||
+ | |||
+ | Une commande pratique pour lister les clés SSH présentent localement, et afficher leur niveau de sécurité (taille, algo, etc) : | ||
+ | <code bash> | ||
+ | for keyfile in ~/ | ||
+ | 1024 c1: | ||
+ | 2048 53: | ||
+ | </ | ||
+ | |||
+ | =====Modifier une passphrase===== | ||
+ | |||
+ | Pour changer la passphrase d'une clé SSH existante : | ||
+ | <code bash> | ||
+ | ssh-keygen -f ~/ | ||
+ | Key has comment ' | ||
+ | Enter new passphrase (empty for no passphrase): | ||
+ | Enter same passphrase again: | ||
+ | Your identification has been saved with the new passphrase. | ||
+ | </ | ||
+ | |||
+ | =====Séquence d' | ||
+ | |||
+ | Lorsqu' | ||
+ | |||
+ | La même avec le client SSH est : '' | ||
+ | |||
+ | =====Saisir un mot de passe via SSH===== | ||
+ | |||
+ | Lorsqu' | ||
+ | |||
+ | Pour transmettre le mot de passe via la connexion SSH il faut ajouter l' | ||
+ | <code bash> | ||
+ | ssh USER@SERVER "sudo whoami" | ||
+ | USER@SERVER'' | ||
+ | sudo: pas de tty présent et pas de programme askpass spécifié | ||
+ | |||
+ | ssh -t USER@SERVER "sudo whoami" | ||
+ | USER@SERVER'' | ||
+ | [sudo] Mot de passe de USER : | ||
+ | root | ||
+ | Connection to SERVER closed. | ||
+ | </ | ||
+ | |||
+ | src : https:// | ||
+ | |||
+ | |||
+ | =====Timeout d' | ||
+ | |||
+ | Lorsqu' | ||
+ | |||
+ | On peut limiter ce timeout pour ne pas avoir à attendre 3 plombes qu'il nous rende la main, en utilisant l' | ||
+ | <code bash> | ||
+ | # réglage du temps maximal d' | ||
+ | ssh -o ConnectTimeout=5 serveur-down | ||
+ | </ | ||
+ | |||
+ | Si " | ||
+ | <code bash> | ||
+ | host serveur-down | ||
+ | | ||
+ | | ||
+ | |||
+ | # limiter les essais à une seule IP | ||
+ | ssh -o ConnectionAttempts=1 serveur-down | ||
+ | </ | ||
+ | |||
+ | |||
+ | =====Connexion SSH via webproxy===== | ||
+ | |||
+ | Pour se connecter en SSH à travers un proxy web, disons " | ||
+ | <code bash ~/ | ||
+ | Host ssh-server | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Ainsi on se connectera simplement avec : '' | ||
+ | |||
+ | Depuis Windows il est plus facile d' | ||
+ | |||
+ | <WRAP center round important 80%> | ||
+ | Certaines versions de netcat (nc) ne possèdent pas l' | ||
+ | C'est le cas sous CentOS/ | ||
+ | <code bash> | ||
+ | ProxyCommand nc --proxy-type http --proxy proxy.corp: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | =====Connexion SSH par rebond===== | ||
+ | |||
+ | Pour se connecter à un serveur | ||
+ | <code bash> | ||
+ | client ---> serveur_bastion ---> serveur_cible | ||
+ | </ | ||
+ | |||
+ | Il suffit de saisir l' | ||
+ | <code bash> | ||
+ | ssh -J bastion cible | ||
+ | </ | ||
+ | |||
+ | Sur de plus ancienne version de SSH on doit remplacer le -J par : | ||
+ | <code bash> | ||
+ | ssh -o ProxyCommand=" | ||
+ | </ | ||
+ | |||
+ | Et sur les plus anciennes versions de SSH on peut utiliser le trick ('' | ||
+ | <code bash> | ||
+ | ssh -tt bastion "ssh -tt cible" | ||
+ | </ | ||
+ | |||
+ | Pour automatiser cela il faut éditer, sur le poste client, le fichier de config perso ('' | ||
+ | <code bash ~/ | ||
+ | Host cible | ||
+ | | ||
+ | # nouvelle méthode | ||
+ | | ||
+ | # ou: | ||
+ | User login_sur_bastion | ||
+ | # | ||
+ | # on peut préciser le certificat à utiliser pour éviter le double prompt | ||
+ | # | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Pour éviter de saisir plusieurs fois son mot de passe, penser à copier sa clé dans les '' | ||
+ | <code bash> | ||
+ | # si pas encore fait, générer une paire de clé sur le poste client | ||
+ | client $ ssh-keygen | ||
+ | [blabla OK OK] | ||
+ | # copier la clé sur le bastion | ||
+ | client $ ssh-copy-id user@bastion | ||
+ | </ | ||
+ | |||
+ | On peut enchainer plusieurs serveurs en enfilade pour se connecter sur le serveur cible : | ||
+ | <code bash ~/ | ||
+ | Host cible | ||
+ | # on sépare les serveurs intermédiaires par une virgule | ||
+ | | ||
+ | # | ||
+ | # ou avec l' | ||
+ | | ||
+ | Host bastion2 | ||
+ | | ||
+ | </ | ||
+ | |||
+ | =====Connexion SSH par rebonds via webproxy===== | ||
+ | |||
+ | On mixe les astuces : on veut se connecter à CIBLE via un premier webproxy, puis un bastion SSH : | ||
+ | < | ||
+ | CLIENT ----- WEBPROXY(SOCKS 5) ----- BASTION ----- CIBLE | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | # on défini le mode de connexino à BASTION (via WEBPROXY sur le port 3128) | ||
+ | Host BASTION | ||
+ | Hostname BASTION.FQDN | ||
+ | ProxyCommand /bin/nc -X connect -x WEBPROXY: | ||
+ | # on défini le mode de connexion à CIBLE (via BASTION en passant la commande ProxyCommand) | ||
+ | Host CIBLE | ||
+ | Hostname CIBLE.FQDN | ||
+ | ProxyCommand ssh BASTION -W %h:%p | ||
+ | ProxyJump BASTION | ||
+ | </ | ||
+ | |||
+ | Depuis Windows, je n'ai pas trouvé de solution avec Putty qui ne gère pas '' | ||
+ | |||
+ | =====Unable to negotiate...===== | ||
+ | |||
+ | Certains clients récents ne sont plus compatibles avec les paramètres négociés avec les serveurs trop vieux (ou inversement...). En effet les anciennes versions sont vulnérables à différentes failles de sécurité. C'est donc une bonne chose de désactiver par défaut la possibilité d' | ||
+ | |||
+ | Cependant avec certains vieux équipements, | ||
+ | <code bash> | ||
+ | ssh admin@upgrayedd | ||
+ | Unable to negotiate with 10.0.2.240 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1 | ||
+ | </ | ||
+ | |||
+ | Il faut donc forcer le client SSH a accepter ces protocoles: | ||
+ | <code bash> | ||
+ | ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 upgrayedd | ||
+ | </ | ||
+ | |||
+ | Ou, plus pérenne, dans le fichier de préférences du client SSH : | ||
+ | <code bash ~/ | ||
+ | Host upgrayedd | ||
+ | KexAlgorithms +diffie-hellman-group1-sha1 | ||
+ | </ | ||
+ | |||
+ | Dans mon cas j' | ||
+ | <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 bash ~/ | ||
+ | Host upgrayedd | ||
+ | KexAlgorithms +diffie-hellman-group1-sha1 | ||
+ | HostKeyAlgorithms +ssh-dss | ||
+ | </ | ||
+ | Il existe une page qui décrit les méthodes pour contourner les problèmes de compatibilité SSH : [[http:// | ||
+ | |||
+ | src: https:// | ||
+ | |||
+ | |||
+ | =====key_verify failed===== | ||
+ | |||
+ | Les vieilles croûtes - les vieilles machines - qui utilisent des vieilles implémentations de SSH peuvent bloquer votre client SSH : | ||
+ | <code bash> | ||
+ | ssh_rsa_verify: | ||
+ | key_verify failed for server_host_key | ||
+ | </ | ||
+ | |||
+ | Pour bypasser ce prérequis de sécurité (ce n'est pas conseillé mais on n'a pas toujours le choix), il faut préciser l' | ||
+ | <code bash> | ||
+ | ssh -1 vieille-croute | ||
+ | </ | ||
+ | |||
+ | =====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' | ||
+ | <code bash> | ||
+ | ssh -f host xterm | ||
+ | </ | ||
+ | |||
+ | Pour faire une redirection de port, il faut ajouter '' | ||
+ | <code bash> | ||
+ | # sans -N | ||
+ | ssh -f -L 5901: | ||
+ | | ||
+ | |||
+ | ssh -f -N -L 5901: | ||
+ | </ | ||
+ | |||
+ | 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(/ | ||
+ | </ | ||
+ | |||
+ | Mais openssh permet de faire les choses proprement, de (au moins) 2 manières : | ||
+ | - ne pas utiliser '' | ||
+ | - utiliser une connexion SSH en mode " | ||
+ | <code bash> | ||
+ | ssh -f -N -M -S < | ||
+ | # (utilisation de la connexion...) puis fermeture : | ||
+ | ssh -S < | ||
+ | </ | ||
+ | |||
+ | source: [[https:// | ||
+ | |||
+ | |||
+ | =====Connexion forcée par mot de passe===== | ||
+ | |||
+ | Pour forcer l' | ||
+ | |||
+ | On peut l' | ||
+ | |||
+ | <code bash> | ||
+ | ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no < | ||
+ | </ | ||
+ | |||
+ | Ces options peuvent se positionner dans le fichier de conf : **~/ | ||
+ | |||
+ | =====Comment transmettre un quote en SSH===== | ||
+ | |||
+ | C'est toujours une galère en informatique pour utiliser les caractères interprétés, | ||
+ | |||
+ | Pour transmettre une apostrophe (ou simple quote en anglais) dans une commande SSH, on ne peut pas juste l' | ||
+ | <code bash> | ||
+ | ssh serveur ls / | ||
+ | |||
+ | bash: -c: ligne 1: fin de fichier (EOF) prématurée lors de la recherche du « ' | ||
+ | </ | ||
+ | |||
+ | Il faut utiliser : | ||
+ | * soit un triple backslash (on " | ||
+ | * un [[https:// | ||
+ | <code bash> | ||
+ | ssh serveur << | ||
+ | ls / | ||
+ | END | ||
+ | |||
+ | / | ||
+ | </ | ||
+ | |||
+ | =====Notification sur Signal d'un login SSH===== | ||
+ | |||
+ | Pour recevoir une notification lorsqu' | ||
+ | * une ligne de configuration dans **pam.d** pour catcher l' | ||
+ | * un script générant le message de notification et l' | ||
+ | * un conteneur docker : [[https:// | ||
+ | Ce dernier nécessite l’appairage avec un compte Signal existant. | ||
+ | |||
+ | NB : j'ai rencontré des erreurs avec la version **signal-cli-rest-api: | ||
+ | <code yaml docker-compose.yml> | ||
+ | version: " | ||
+ | services: | ||
+ | signal-cli-rest-api: | ||
+ | # image: bbernhard/ | ||
+ | image: bbernhard/ | ||
+ | container_name: | ||
+ | networks: | ||
+ | - br-sig | ||
+ | environment: | ||
+ | - MODE=native #supported modes: json-rpc, native, normal (by speed order) | ||
+ | ports: | ||
+ | - " | ||
+ | volumes: | ||
+ | - " | ||
+ | |||
+ | networks: | ||
+ | br-sig: | ||
+ | external: true | ||
+ | </ | ||
+ | |||
+ | Ce script basique : | ||
+ | <code bash / | ||
+ | #!/bin/sh | ||
+ | # envoyer une notif signal lors d'un login | ||
+ | NUMBER=" | ||
+ | URL=http:// | ||
+ | MESSAGE=" | ||
+ | |||
+ | if [ " | ||
+ | curl -X POST -H " | ||
+ | -d " | ||
+ | fi | ||
+ | </ | ||
+ | |||
+ | Et ce " | ||
+ | <code bash / | ||
+ | session optional pam_exec.so seteuid / | ||
+ | </ | ||
+ | |||
+ | =====SSH Keepalive===== | ||
+ | |||
+ | Afin d' | ||
- | (il parait que ça marche aussi avec putty, en activant | + | Cela peut se configurer côté client, dans le fichier **~/.ssh/config** pour une portée discrète (uniquement la connexion vers le serveur " |
+ | <code bash ~/.ssh/ | ||
+ | Host serveur-ssh | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | Comme d'hab les paramètres peuvent aussi se définir au moment de la commande SSH avec l' | ||
+ | <code bash> | ||
+ | ssh -o ServerAliveInterval=300 -o ServerAliveCountMax=2 serveur-ssh | ||
+ | </ | ||
- | ===== Liens ===== | + | Côté serveur, cela se définit dans le fichier **/ |
+ | <code bash / | ||
+ | ClientAliveInterval 300 | ||
+ | ClientAliveCountMax 2 | ||
+ | </ | ||
+ | ====== Liens ====== | ||
[[http:// | [[http:// |
informatique/logiciels/ssh.1244492135.txt.gz · Last modified: 2013/10/14 20:55 (external edit)