« SSH » : différence entre les versions
(9 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 65 : | Ligne 65 : | ||
== Windows == | == Windows == | ||
=== Install OpenSSH Client === | === [https://interworks.com/blog/2021/09/08/how-to-enable-ssh-commands-in-windows/ Install OpenSSH Client] === | ||
Settings → Apps → Optional Features → Add a feature → OpenSSH Client → Install | # Settings → Apps → Optional Features → Add a feature → OpenSSH Client → Install | ||
# Sign out and in | |||
=== Enable SSH Authentication Agent === | |||
# Services → OpenSSH Authentication Agent → right-click → Properties | |||
# Startup type = Automatic | |||
# Apply | |||
# Start | |||
=== Cygwin === | === Cygwin === | ||
Ligne 165 : | Ligne 172 : | ||
{{info | Désactiver [[SSH#D.C3.A9sactiver_les_connexions_avec_login_et_mot_de_passe|l'authentification par mots de passe]] une fois l'authentification par clés activée.}} | {{info | Désactiver [[SSH#D.C3.A9sactiver_les_connexions_avec_login_et_mot_de_passe|l'authentification par mots de passe]] une fois l'authentification par clés activée.}} | ||
== | == [https://stackoverflow.com/questions/112396/how-do-i-remove-the-passphrase-for-the-ssh-key-without-having-to-create-a-new-ke Remove the passphrase] == | ||
<kode lang='bash'> | <kode lang='bash'> | ||
# aalow to change the passphrase, select blank as the new one | |||
ssh-keygen -p | |||
</kode> | </kode> | ||
Ligne 183 : | Ligne 189 : | ||
Permet de mettre en cache la clé privée déchiffrée avec la passphrase et ainsi ne la demander que la première fois. | Permet de mettre en cache la clé privée déchiffrée avec la passphrase et ainsi ne la demander que la première fois. | ||
<kode lang=bash> | <kode lang=bash> | ||
# | # check that ssh-agent.service is well started | ||
systemctl --user status ssh-agent.service | |||
# don't use sc-status --user, it is an alias to sudo systemctl --user status | |||
# | # add the private key, the passphrase will be asked if the key is encrypted | ||
ssh-add ~/.ssh/ | ssh-add ~/.ssh/id_ed25519 | ||
# | # list the loaded keys | ||
ssh-add -L | ssh-add -L | ||
# | # empty all the keys | ||
ssh-add -D | ssh-add -D | ||
</kode> | |||
<filebox fn='~/.zshenv' lang='bash'> | |||
# define the SSH_AUTH_SOCK: here the one for ssh-agent started with systemd user | |||
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent.socket | |||
</filebox> | |||
=== [https://wiki.archlinux.org/title/GNOME/Keyring#SSH_keys Gnome keyring] === | |||
Allows to unlock the keys at login. | |||
<kode lang='bash'> | |||
# ensure gcr-ssh-agent is running | |||
systemctl --user status gcr-ssh-agent.socket | |||
# | # to permanently save a passphrase in the keyring | ||
/usr/lib/seahorse/ssh-askpass my_key | |||
</kode> | </kode> | ||
<filebox fn='~/.zshenv' lang='bash'> | |||
# If gcr-ssh-agent is used: | |||
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/gcr/ssh | |||
<filebox fn=~/.zshenv lang=bash> | |||
# | |||
</filebox> | </filebox> | ||
Dernière version du 4 avril 2024 à 14:55
Installation
# Installer le serveur et le client
pacman -S openssh
|
Serveur
# redémarrer le service
systemctl restart sshd
# Historique des connexions
cat /var/log/auth.log
|
Configuration
/etc/ssh/sshd_config |
PermitRootLogin prohibit-password # (default) allow connection with root user only with public-key
# yes allow connection with root user
# no don't allow connection with root user
PasswordAuthentication no # disable SSH password authentication (default: yes)
X11Forwarding no # not needed (default: yes)
# Pluggable Authentication Module (default: yes)
UsePAM no ???
# liste les utilisateurs autorisés à se connecter, tous les autres sont interdit
AllowUsers user1 user2@192.168.x.y
# user1 from anywhere
# user2 only from 192.168.x.y
# liste les utilisateurs non-autorisés à se connecter
DenyUsers user1 user2
|
![]() |
Pour que les modifications soient prises en compte il faut redémarrer le serveur SSH |
Client
Linux
ssh login@remote-host -p port 'remote command'
# par défaut le port 22 est utilisé
# plusieurs commandes (Here Documents)
ssh login@remote-host << EOF
pwd
ls -al
EOF
# tunnel SSH
# entrée localhost:9999
# sortie remote-host:5900
ssh -C -NL 9999:localhost:5900 login@remote-host
# -C : compréssion des données, util pour les connexions à faible débit
# -N : ne pas éxécuter de commande sur le poste distant
|
![]() |
Pour avoir des couleurs dans la console, il faut configurer le fichier .bashrc de l'hôte |
![]() |
Pour quitter le terminal en laissant une commande tourner, utiliser disown |
![]() |
Pseudo-terminal will not be allocated because stdin is not a terminal. Use ssh -T to disable pseudo-tty allocation. |
Windows
Install OpenSSH Client
- Settings → Apps → Optional Features → Add a feature → OpenSSH Client → Install
- Sign out and in
Enable SSH Authentication Agent
- Services → OpenSSH Authentication Agent → right-click → Properties
- Startup type = Automatic
- Apply
- Start
Cygwin
Installer openssh
PuTTY
Coller | clique-droit ou Shift+Ins ou Ctrl+clique-droit+Paste |
Private key | Connection → SSH → Auth |
Home / End | Connection → Data → Terminal Details → Terminal-type string = linux |
![]() |
Utilisez l'installeur qui contient tous les binaires utiles. |
pscp
# copie d'un fichier distant vers le poste local
pscp user@host:/remote/path/file.txt C:\folder
# copie d'un fichier local vers le poste distant
pscp C:\folder\file.txt user@host:/remote/path/folder
# pour une authentification avec une clé
pscp -i C:\path\id_rsa.ppk user@host:/remote/path/file.txt C:\folder
# utiliser pageant pour ne pas avoir à entrer la passphrase à chaque fois
|
Authentification avec une clé SSH
![]() |
Problème avec les caractères accentués. |
SFTP
Copie de fichiers et de dossiers
rsync
# téléchargement du fichier-distant, puis suppression du fichier sur le serveur
rsync --remove-source-files compte-distant@serveur-ssh:/chemin/serveur/ssh/fichier-distant /chemin/local
rsync -avz --delete-after /chemin/dossier user@remote-host:/chemin/dossier/
|
![]() |
rsync doit être installé sur le client et le serveur. |
![]() |
Utilisation de rsync avec sudo: Si rsync est utilisé avec sudo, c'est le compte root local qui va tenter de se connecter au serveur ssh. |
SCP
Copie de fichiers vers le serveur SSH
# envoie du fichier-local vers le serveur
scp fichier-local compte-distant@serveur-ssh:/chemin/serveur/ssh
# téléchargement du fichier-distant
scp compte-distant@serveur-ssh:/chemin/serveur/ssh/fichier-distant /chemin/local
|
fingerprint
À la première connexion à un serveur, l'empreinte (fingerprint) de la clé RSA du serveur est affichée afin de vérifier que le serveur auquel on se connecte est bien celui que l'on croit.
# afficher l'empreinte de la clé RSA du serveur depuis le serveur
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
|
SSHKeys
Permet une authentification sans mot de passe.
Ajouter la clé publique du client dans les clé autorisées du serveur.
![]() |
La saisie d'une passphrase lors de la génération de la clé privée nécessitera par la suite de lancer un ssh-agent et d'entrée cette passphrase pour déverrouiller la clé privée. |
# génération des clés privée et publique depuis le client
# Ed25519 : most recommended public-key algorithm available today
ssh-keygen -t ed25519 -C "$(whoami)@$(hostname) $(date -I)"
# public key: ~/.ssh/id_ed25519.pub
# private key: ~/.ssh/id_ed25519
# RSA
ssh-keygen -o -b 4096 -C "$(whoami)@$(hostname)-$(date -I)"
# clé privée: ~/.ssh/id_rsa
# clé publique: ~/.ssh/id_rsa.pub
# -b 4096 passez le chiffrement à 4096 bits au lieu des 3072 par défaut
# -o encode your private key in a new, more secure format
# -C commentaire
# envoyer la clé publique depuis le client au serveur
ssh-copy-id <username>@<ssh-server>
# <username> correspond au compte du serveur SSH avec lequel on souhaite être connecté (ex: root)
# méthode manuelle
mkdir ~/.ssh
chmod 700 ~/.ssh
# ajouter le contenu du fichier id_rsa.pub au fichier authorized_keys
chmod 600 ~/.ssh/authorized_keys
|
![]() |
La commande ssh-copy-id ajoute le contenu du fichier ~/.ssh/id_rsa.pub au fichier serveur <userhome>/.ssh/authorized_keys Le fichier <userhome>/.ssh/authorized_keys peut ainsi contenir plusieurs clés autorisant différent utilisateurs. |
![]() |
Désactiver l'authentification par mots de passe une fois l'authentification par clés activée. |
Remove the passphrase
# aalow to change the passphrase, select blank as the new one
ssh-keygen -p
|
Restrictions dans la clé publique
~/.ssh/authorized_keys |
from="192.168.0.1,192.168.0.*?,*.example.com",
command="/bin/pwd",
,no-port-forwarding,no-x11-forwarding,no-agent-forwarding
ssh-rsa AA...== comment-client-user@client-hostname
|
SSH agents
Permet de mettre en cache la clé privée déchiffrée avec la passphrase et ainsi ne la demander que la première fois.
# check that ssh-agent.service is well started
systemctl --user status ssh-agent.service
# don't use sc-status --user, it is an alias to sudo systemctl --user status
# add the private key, the passphrase will be asked if the key is encrypted
ssh-add ~/.ssh/id_ed25519
# list the loaded keys
ssh-add -L
# empty all the keys
ssh-add -D
|
~/.zshenv |
# define the SSH_AUTH_SOCK: here the one for ssh-agent started with systemd user
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent.socket
|
Gnome keyring
Allows to unlock the keys at login.
# ensure gcr-ssh-agent is running
systemctl --user status gcr-ssh-agent.socket
# to permanently save a passphrase in the keyring
/usr/lib/seahorse/ssh-askpass my_key
|
~/.zshenv |
# If gcr-ssh-agent is used:
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/gcr/ssh
|
SSHKeys avec PuTTY
Générer les clés
- Lancer PuTTYgen
- Générer une clé privé et publique (RSA ou SSH-2 RSA, 4096 bits)
- Entrer une passphrase (512)
- Sauvegarder la clé publique %HOMEPATH%\ssh\id_rsa.pub et la clé privée %HOMEPATH%\ssh\id_rsa.ppk via les 2 boutons Save
Autoriser la clé publique sur le serveur SSH
- PuTTYgen → copier "Public key for pasting into OpenSSH authorized_keys file"
- Serveur SSH → coller la clé publique dans le fichier ~/.ssh/authorized_keys
- Vérifier que ce fichier n'est accessible que par l'utilisateur chmod 600
Ajouter la clé privée à la session PuTTY
- Session → Créer ou charger une session
- Connection → SSH → Auth → spécifiez le chemin vers la clé privée
- Session → Sauvegarder la session
Auto-login: utilisateur par défaut
- Session → Créer ou charger une session
- Connexion → Data → Auto-login username
- Session → Sauvegarder la session
Pageant
- lancer pageant
- double-cliquer sur l’icône pageant dans la barre des icônes
- Add key → sélectionner la clé privée
Pageant tourne en tache de fond et déverrouille la clé privée au besoin.
Pageant n'enregistre ni l'emplacement de la clé privée ni la passphrase: à la prochaine exécution il faudra recommencer
Il est possible de créer un raccourci pour que la clé privée soit ajoutée au lancement:
"C:\path\to\pageant.exe" "C:\path\to\private_key.ppk"
Désactiver les connexions avec login et mot de passe
/etc/ssh/sshd_config |
Protocol 2 PasswordAuthentication no UsePAM no |
# puis redemarrez le serveur SSH
sudo systemctl restart sshd
|
Langue
Par défaut les variable LANG et LC_* ne semble pas être définit après une connexion ssh.
Pour forcer leur définition, il faut authoriser le client à envoyer ses valeurs et le serveurs à les recevoir.
/etc/ssh/ssh_config |
# client
Host *
SendEnv LANG LC_*
|
/etc/ssh/sshd_config |
# serveur
AcceptEnv LANG LC_*
|
Erreurs
# debug client
ssh -vvv user@host
# vérifier la configuration serveur
sshd -t
# debug serveur
sshd -Dddd
|
REMOTE HOST IDENTIFICATION HAS CHANGED!
Le fichier ~/.ssh/known_hosts contient une clé d'identification qui ne correspond pas à la cible.
ssh-keygen -R hostname |
~/.ssh/known_hosts
Contient les identifiants des serveurs SSH connus, afin de s'assurer que le client se connecte bien au bon serveur.
# supprimer un serveur du fichier known_hosts
ssh-keygen -R serveur_ssh_à_supprimer
|
Créer un compte pour les backup
# côté serveur
useradd -r -m backup
passwd backup
su backup
mkdir .ssh
# ajout de la clé du client
nano .ssh/authorized_keys
# côté client
# génération de la clé sans mot de passe
ssh-keygen -o -b 4096 -C "$(whoami)@$(hostname)-$(date -I)"
# synchroniser un dossier distant
rsync -rLp --progress --delete backup@server:/remote-path/folder/ /local-path/folder
|
sshfs
Monter un système de fichier distant au travers d'une connexion ssh.
# installation
sudo pacman -S sshfs
# vérifier que le module fuse est bien chargé
systemctl list-units --all | grep fuse
# sys-module-fuse.device
# loaded active plugged /sys/module/fuse
# vérifier plutôt avec lsmod
lsmod | grep fuse
# charger le module fuse s'il n'a pas encore été chargé
sudo modprobe fuse
# montez le système de fichier distant
sshfs user@host:/remote/folder /mount/point
# demontez le système de fichier distant
fusermount -u /mount/point
|
/etc/fstab |
user@host:/remote/folder /mount/point fuse.sshfs noauto,x-systemd.automount,_netdev,reconnect,uid=1000,gid=1000,user 0 0 |
Options | Explications |
---|---|
noauto,x-systemd.automount | Ne pas monter au démarrage mais à la demande |
_netdev | Attend que le réseau soit accessible, utile pour les systèmes de fichiers distants |
uid=1000 gid=1000 |
Force les uid et gid du système de fichier N’accepte que la forme chiffrée |
user | Autorise n'importe quel utilisateur à monter le système de fichiers |
allow_other | Allow other users than the mounter (i.e. root) to access the share |
default_permissions | Allow kernel to check permissions, i.e. use the actual permissions on the remote filesystem. This allows prohibiting access to everybody otherwise granted by allow_other. |
idmap=user | Change le UID du système de fichier par celui de l'utilisateur courant |
IdentityFile=/home/user/.ssh/id_rsa | ??? |
sudo over sshfs
- allow user to run sudo without password
sshfs <user>@<host>:/remote/path /local/path -o sftp_server="sudo /usr/lib/openssh/sftp-server"
# path to sftp-server may be different on other OS, find it in remote /etc/ssh/ssh_config
# Subsystem sftp /usr/lib/openssh/sftp-server
|
Connection reset by peer
Ne pas lancer sshfs avec sudo.
Client Windows: SSHFS-Win · SSHFS for Windows
chocolatey install winfsp sshfs |
- Accéder au dossier d'une machine distante: \\sshfs\user@host[\path]
- Monter le dossier root d'une machine distante dans un lecteur réseau:
net use S: \\sshfs\user@host\..\..
OLD Client Windows: win-sshfs (Sshfs Manager)
sshfs-win
- Url: \\sshfs\user@host
- Network drive: \\sshfs\user@host\..\..
![]() |
Ne permet pas la connexion avec une clé privée. |
win-sshfs
- installer WinSSHFS
- lancer WinSshFS
Erreur unable to load DLL 'dokan1.dll'
- télécharger le zip de dokan 1.0.5
- extraire Win32\Release\dokan1.dll dans C:\Program Files (x86)\WinSshFS
- installer dokan 1.1.0.2000
![]() |
Pour la connexion avec une clé privée, utiliser pageant |