-
LINUX > SSH
INSTALLER ET DÉMARRER LE SERVEUR SSH
sudo apt install openssh-server -y
Pour vérifier que ssh est bien installé :
systemctl is-enabled ssh
On peut voir si ssh est démarré :
systemctl status sshd
Tester l’accès à SSH :
ip a 2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:d3:f5:b0 brd ff:ff:ff:ff:ff:ff inet 192.168.0.20/24 brd 192.168.0.255 scope global dynamic ens33
rootn’est pas accessible par ssh. Pour cela, changer la valeur dePermitRootLogindans/etc/ssh/sshd_configpuis redémarrer SSH.CHANGER LE PORT PAR DÉFAUT
NOTE : Le nouveau port SSH ne doit pas être en conflit avec les ports connus ou bloqués.
Se connecter au serveur via SSH :
ssh utilisateur@adresse_IP:port
Passer en root :
su -
Dans le fichier
/etc/ssh/sshd_config:# Port 22
Supprimez
#et remplacer22par le port souhaité.Redémarrer
sshd:service sshd restart sudo systemctl restart ssh
Vérifier les changements (ici, port 123) :
sudo netstat -tlpn| grep ssh tcp 0 0 0.0.0.0:123 0.0.0.0:* LISTEN 5214/sshd: /usr/s tcp6 0 0 :::123 :::* LISTEN 5214/sshd: /usr/s sudo ss -tlpn| grep ssh LISTEN 0 128 0.0.0.0:123 0.0.0.0:* users:(("sshd",pid=5214,fd=3)) LISTEN 0 128 :::123 :::* users:(("sshd",pid=5214,fd=4))
CONNEXION SANS MOT DE PASSE
Il faut créer une clé publique et l’envoyer dans
~/.ssh/authorized_keysdes machines distantes.1 - Vérifier si une paire de clés SSH existe déjà :
ls -al ~/.ssh/id_*.pub ls: impossible d'accéder à '/home/toto/.ssh/id_*.pub': Aucun fichier ou dossier de ce nom
Cela veut dire qu’il n’existe pas de clé. Sinon, si une clé existe, aller directement à l’étape 3.
2 - Créer la paire de clés SSH :
ssh-keygen -t rsa -b 4096 -C "email@site.com"
Ici, une clé de 4096 bits avec l’adresse mail en commentaire.
Presser
Enterpour accepter le nom et la destination du fichier (~/.ssh/id_rsa)Puis, il sera demandé une phrase de sécurité. On peut s’en passer en appuyant sur
EnterPour s’assurer que les clés ont été créées :
ls ~/.ssh/id_* /home/toto/.ssh/id_rsa /home/toto/.ssh/id_rsa.pub
3 - Copier la clé publique :
Sur la machine locale :
ssh-copy-id distant_user@distant_ip
La clé sera copiée dans
~/.ssh/authorized_keyset la connexion prendra fin.Si ssh-copy-id n’est pas installé sur la machine :
cat ~/.ssh/id_rsa.pub | ssh remote_user@dest_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
4 - Tester que tout fonctionne correctement :
ssh foo@machine2
La connexion devrait se faire sans mot de passe.
Désactiver l’authentification SSH par mot de passe
Pour créer un user sudo, il faut se loguer avec un compte déjà sudo :
ssh sudo_user@server_ip
Ouvrir le fichier de configuration SSH (
/etc/ssh/sshd_config) et modifier les directives suivantes :PasswordAuthentication no ChallengeResponseAuthentication no UsePAM no
Sauvegarder et redémarrer SSH :
sudo systemctl restart ssh
Configuration pour automatiser SSH
Pour automatiser la connexion aux machines distantes, on peut créer des sortes d’alias spéciales pour SSH :
SSH Config File Location
Si le fichier
~/.ssh/confign’existe pas :touch ~/.ssh/config chmod 600 ~/.ssh/config
SSH Config File Structure and Patterns
Host hostname1 SSH_OPTION value SSH_OPTION value Host hostname2 SSH_OPTION value Host * SSH_OPTION value
Chaque section (stanzas) commence par la directive
Hostet contient les options SSH adéquates :Host *matches all hosts, while192.168.0.*matches hosts in the192.168.0.0/24.?pour un seul caractère =>Host 10.10.0.?-> tous les hosts in10.10.0.[0-9].!au début du pattern, exclu l’hôte =>Host 10.10.0.* !10.10.0.5-> tous les10.10.0.0/24sauf10.10.0.5.NOTE: Dès qu’un pattern matche, alors les options rencontrées seront prioritaires aux suivantes. Voir la page ssh_config man.
Exemple 1
Exemple,au lieu de taper :
ssh john@dev.example.com -p 2322 -> ssh jj
Écrire dans
~/.ssh/config:Host jj HostName dev.example.com User john Port 2322
On peut maintenant taper :
ssh jj
Exemple 2
Host targaryen HostName 192.168.1.10 User daenerys Port 7654 IdentityFile ~/.ssh/targaryen.key Host tyrell HostName 192.168.10.20 Host martell HostName 192.168.10.50 Host *ell user oberyn Host * !martell LogLevel INFO Host * User root Compression yes
Avec
ssh targaryen, les options seront donc :HostName 192.168.1.10 User daenerys Port 7654 IdentityFile ~/.ssh/targaryen.key LogLevel INFO Compression yes
Avec
ssh tyrell:HostName 192.168.10.20 User oberyn LogLevel INFO Compression yes
Avec
ssh martell:HostName 192.168.10.50 User oberyn Compression yes
Ordre des options
Les options seront lues dans l’ordre : depuis la ligne de commande > puis
~/.ssh/config> puis/etc/ssh/ssh_config.ssh -o "User=root" dev
COPIER DES FICHIERS VIA SCP
scp <options> user1@SOURCE_IP:fichier1 user2@DEST_IP:/chemin/fichier2
-PSpecifies the remote host ssh port.-pConserve les dates de modification et d’access.-qSuppress the progress meter and non-error messages.-CCompresses the data as it is sent to the destination machine.-rCopy directories recursively.NOTE: scp écrasera un fichier déjà existant sans avertissement !
NOTE: Pour les gros fichiers, utliser scp au sein de
screenoutmux.Copie LOCAL -> DISTANT
scp fichier toto@10.10.0.2:/chemin/distant toto@10.10.0.2's password: fichier 100% 0 0.0KB/s 00:00
Ne pas donner de nom au dossier distant, donnera e même nom que le local. Sinon, donner un autre nom.
scp fichier nom@DEST_IP:/chemin/dossier/nouveau_nom scp -P 2322 fichier nom@DEST_IP:/chemin/dossier
Pour cxopier tout un dossier, utiliser l’option
-r(recursive):scp -r /local/dossier nom@DEST_IP:/chemin/dossier
Copie DISTANT -> LOCAL
scp nom@DISTANT_IP:/chemin/fichier /local/dossier
Copie DISTANT_1 -> DISTANT_2
Copier le fichier
/dossier/fichierdepuis MACHINE_1 vers le dossier/dossierde MACHINE_2 :scp user1@MACHINE_1:/dossier/fichier user2@MACHINE_2:/dossier
Pour router le traffic à travers la machine exécutant la commande, utiliser l’option
-3:scp -3 user1@MACHINE_1:/dossier/fichier user2@MACHINE_2:/dossier