Des exemples pratiques de
SSH qui feront passer vos compétences d'administrateur système à distance au niveau supérieur. Les commandes et les conseils vous aideront non seulement à utiliser
SSH
, mais également à naviguer plus efficacement sur le réseau.
Connaître quelques astuces
ssh
est utile à tout administrateur système, ingénieur réseau ou spécialiste de la sécurité.
Exemples pratiques SSH
- Chaussettes SSH proxy
- Tunnel SSH (redirection de port)
- Tunnel SSH vers le troisième hôte
- Tunnel inversé SSH
- Proxy inverse SSH
- Installation de VPN sur SSH
- Copier la clé SSH (ssh-copy-id)
- Exécution de commandes à distance (non interactive)
- Capture et visualisation à distance des paquets dans Wireshark
- Copie d'un dossier local sur un serveur distant via SSH
- Applications GUI de transfert SSH X11 à distance
- Copie de fichiers à distance à l'aide de rsync et SSH
- SSH sur le réseau Tor
- Instance SSH vers EC2
- Modification de fichiers texte à l'aide de VIM via ssh / scp
- Montage de SSH distant en tant que dossier local avec SSHFS
- Multiplexage SSH avec ControlPath
- Streaming vidéo SSH en utilisant VLC et SFTP
- Authentification à deux facteurs
- Host Jumping avec SSH et -J
- Bloquer les tentatives de force brute SSH avec iptables
- SSH Escape pour modifier la redirection de port
Les bases d'abord
Analyse de la ligne de commande SSH
L'exemple suivant utilise les paramètres habituels que l'on trouve souvent lors de la connexion à un serveur
SSH
distant.
localhost:~$ ssh -v -p 22 -C neo@remoteserver
-v
: la sortie de débogage est particulièrement utile lors de l'analyse des problèmes d'authentification. Vous pouvez l'utiliser plusieurs fois pour afficher des informations supplémentaires.- p 22
: port de connexion à un serveur SSH distant. 22 n'est pas nécessaire à spécifier, car il s'agit de la valeur par défaut, mais si le protocole est sur un autre port, nous le -p
l'aide du paramètre -p
. Le port d'écoute est spécifié dans le fichier sshd_config
au format Port 2222
.-C
: compression pour la connexion. Si vous avez un flux lent ou que vous consultez beaucoup de texte, cela peut accélérer la connexion.neo@
: la ligne précédant le symbole @ indique le nom d'utilisateur pour l'authentification sur le serveur distant. Si vous ne le spécifiez pas, par défaut, le nom d'utilisateur du compte auquel vous êtes actuellement connecté sera utilisé (~ $ whoami). L'utilisateur peut également être spécifié avec l'option -l
.remoteserver
: le nom d'hôte auquel ssh
connecte, il peut s'agir d'un nom de domaine complet, d'une adresse IP ou de tout hôte du fichier d'hôtes local. Pour vous connecter à un hôte qui prend en charge IPv4 et IPv6, vous pouvez ajouter l'option -4
ou -6
à la ligne de commande pour une résolution correcte.
Toutes les options ci-dessus sont facultatives à l'exception du
remoteserver
.
Utilisation du fichier de configuration
Bien que beaucoup connaissent le fichier
sshd_config
, il existe également un fichier de configuration client pour la commande
ssh
. La valeur par défaut est
~/.ssh/config
, mais elle peut être définie comme paramètre pour l'option
-F
.
Host * Port 2222 Host remoteserver HostName remoteserver.thematrix.io User neo Port 2112 IdentityFile /home/test/.ssh/remoteserver.private_key
L'exemple de fichier de configuration ssh ci-dessus a deux entrées d'hôte. Le premier indique tous les hôtes, le paramètre de configuration du port 2222 est utilisé pour tous. Le second indique que pour l'hôte du serveur
distant , utilisez un nom d'utilisateur, un port, un FQDN et un IdentityFile différents.
Un fichier de configuration peut économiser beaucoup de temps à taper des caractères, ce qui vous permet d'appliquer automatiquement une configuration avancée lors de la connexion à des hôtes spécifiques.
Copiez des fichiers sur SSH à l'aide de SCP
Le client SSH est livré avec deux autres outils très pratiques pour copier des fichiers sur une
connexion ssh chiffrée . Voir ci-dessous pour un exemple d'utilisation standard des commandes scp et sftp. Notez que de nombreuses options pour ssh s'appliquent également à ces commandes.
localhost:~$ scp mypic.png neo@remoteserver:/media/data/mypic_2.png
Dans cet exemple, le fichier
mypic.png est copié sur le
serveur distant dans le dossier
/ media / data et renommé en
mypic_2.png .
N'oubliez pas la différence de paramètre de port. Cela rencontre de nombreux utilisateurs qui exécutent
scp
partir de la ligne de commande. Ici, le paramètre de port est
-P
, pas
-p
, comme dans le client ssh! Vous oublierez, mais ne vous inquiétez pas, tout le monde oubliera.
Pour ceux qui connaissent le
ftp
console, la plupart des commandes sont similaires dans
sftp
. Vous pouvez faire
pousser ,
mettre et
ls comme votre coeur le désire.
sftp neo@remoteserver
Exemples pratiques
Dans beaucoup de ces exemples, le résultat peut être obtenu par différentes méthodes. Comme pour tous nos
manuels et exemples, la préférence est donnée aux exemples pratiques qui font tout simplement leur travail.
1. proxy chaussettes SSH
SSH Proxy au numéro 1 pour une bonne raison. Il est plus puissant que beaucoup ne le pensent et vous donne accès à n'importe quel système auquel un serveur distant a accès en utilisant presque toutes les applications. Le client ssh peut tunneliser le trafic via le proxy SOCKS avec une seule commande simple. Il est important de comprendre que le trafic vers les systèmes distants proviendra d'un serveur distant, comme indiqué dans les journaux du serveur Web.
localhost:~$ ssh -D 8888 user@remoteserver localhost:~$ netstat -pan | grep 8888 tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 23880/ssh
Ici, nous exécutons le proxy socks sur le port TCP 8888, la deuxième commande vérifie que le port est actif en mode écoute. 127.0.0.1 indique que le service s'exécute uniquement sur localhost. Nous pouvons utiliser une commande légèrement différente pour écouter toutes les interfaces, y compris ethernet ou wifi, cela permettra à d'autres applications (navigateurs, etc.) sur notre réseau de se connecter au service proxy via le proxy ssh socks.
localhost:~$ ssh -D 0.0.0.0:8888 user@remoteserver
Nous pouvons maintenant configurer le navigateur pour qu'il se connecte au proxy socks. Dans Firefox, sélectionnez
Paramètres | Faits saillants | Paramètres réseau Spécifiez l'adresse IP et le port à connecter.

Faites attention à l'option au bas du formulaire afin que les requêtes DNS du navigateur passent également par les proxys SOCKS. Si vous utilisez un serveur proxy pour crypter le trafic Web sur le réseau local, vous souhaiterez probablement sélectionner cette option afin que les requêtes DNS soient tunnelisées via une connexion SSH.
Activation du proxy de chaussettes dans Chrome
L'exécution de Chrome avec certaines options de ligne de commande active les proxys de chaussettes, ainsi que le tunneling des requêtes DNS à partir du navigateur. Faites confiance, mais vérifiez. Utilisez
tcpdump pour vérifier que les requêtes DNS ne sont plus visibles.
localhost:~$ google-chrome --proxy-server="socks5://192.168.1.10:8888"
Utilisation d'autres applications proxy
Gardez à l'esprit que de nombreuses autres applications peuvent également utiliser des proxys de chaussettes. Un navigateur Web est tout simplement le plus populaire d'entre eux. Certaines applications ont des options de configuration pour activer un serveur proxy. D'autres ont besoin d'un peu d'aide avec le programme d'aide. Par exemple, les
proxychains vous permettent d'exécuter Microsoft RDP, etc. via des chaussettes-proxies.
localhost:~$ proxychains rdesktop $RemoteWindowsServer
Les paramètres de configuration du proxy socks sont définis dans le fichier de configuration proxychains.
Astuce: si vous utilisez le bureau à distance depuis Linux sur Windows? Essayez le client FreeRDP . Il s'agit d'une implémentation plus moderne que rdesktop
, avec une interaction beaucoup plus fluide.
Option SSH via proxy de chaussettes
Vous êtes assis dans un café ou un hôtel et êtes obligé d'utiliser une connexion Wi-Fi peu fiable. Depuis l'ordinateur portable, lancez localement le proxy ssh et installez le tunnel ssh dans le réseau domestique sur le Rasberry Pi local. À l'aide d'un navigateur ou d'autres applications configurées pour les proxys de chaussettes, nous pouvons accéder à tous les services réseau sur notre réseau domestique ou accéder à Internet via une connexion domestique. Tout entre votre ordinateur portable et votre serveur domestique (via Wi-Fi et Internet à votre domicile) est crypté dans le tunnel SSH.
2. Tunnel SSH (redirection de port)
Dans sa forme la plus simple, un tunnel SSH ouvre simplement un port sur votre système local qui se connecte à un autre port à l'autre extrémité du tunnel.
localhost:~$ ssh -L 9999:127.0.0.1:80 user@remoteserver
Examinons l'option
-L
. Il peut être représenté comme le côté local de l'écoute. Ainsi, dans l'exemple ci-dessus, le port 9999 est écouté du côté de l'hôte local et est transmis via le port 80 au serveur distant. Veuillez noter que 127.0.0.1 fait référence à localhost sur le serveur distant!
Montons une étape. Dans l'exemple suivant, les ports d'écoute communiquent avec d'autres nœuds du réseau local.
localhost:~$ ssh -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver
Dans ces exemples, nous nous connectons au port du serveur Web, mais il peut s'agir d'un serveur proxy ou de tout autre service TCP.
3. Tunnel SSH vers un hôte tiers
Nous pouvons utiliser les mêmes paramètres pour connecter un tunnel d'un serveur distant à un autre service fonctionnant sur un troisième système.
localhost:~$ ssh -L 0.0.0.0:9999:10.10.10.10:80 user@remoteserver
Dans cet exemple, nous redirige le tunnel de remoteserver vers un serveur web fonctionnant sur 10.10.10.10. Le trafic avec remoteserver par 10.10.10.10
n'est plus dans le tunnel SSH . Le 10.10.10.10, le serveur Web considérera remoteserver comme source de requêtes Web.
4. Tunnel SSH inversé
Ici, nous configurons le port d'écoute sur le serveur distant, qui se connectera à nouveau au port local sur notre hôte local (ou un autre système).
localhost:~$ ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 user@remoteserver
Dans cette session SSH, une connexion est établie du port 1999 sur le serveur distant au port 902 sur notre client local.
5. Proxy SSH inversé
Dans ce cas, nous installons le proxy socks sur notre connexion ssh, cependant, le proxy écoute sur l'extrémité distante du serveur. Les connexions à ce proxy distant apparaissent désormais à partir du tunnel en tant que trafic provenant de notre hôte local.
localhost:~$ ssh -v -R 0.0.0.0:1999 192.168.1.100 user@remoteserver
Dépannage des tunnels SSH distants
Si vous avez des problèmes avec les options SSH distantes, vérifiez avec
netstat
quelles autres interfaces le port d'écoute est connecté. Bien que nous ayons spécifié 0.0.0.0 dans les exemples, mais si la valeur
GatewayPorts dans
sshd_config est définie sur
no , l'écouteur sera uniquement lié à localhost (127.0.0.1).
Avertissement de sécurité
Veuillez noter que lors de l'ouverture de tunnels et de proxys de chaussettes, des ressources réseau internes peuvent être disponibles pour des réseaux non approuvés (par exemple, Internet!). Cela peut représenter un grave risque pour la sécurité, alors assurez-vous de bien comprendre ce qu'est l'auditeur et ce à quoi il a accès.
6. Installation de VPN sur SSH
Le terme général parmi les spécialistes des méthodes d'attaque (pentesters, etc.) est «le pivot du réseau». Après avoir établi une connexion dans un système, ce système devient une passerelle pour un accès ultérieur au réseau. Le point d'appui qui vous permet de vous déplacer en largeur.
Pour un tel point d'appui, nous pouvons utiliser des proxys SSH et des
proxychains , mais il y a quelques limitations. Par exemple, vous ne pourrez pas travailler directement avec les sockets, nous ne pourrons donc pas analyser les ports à l'intérieur du réseau via
Nmap SYN
.
En utilisant cette option VPN plus avancée, la connexion tombe au
niveau 3 . Ensuite, nous pouvons simplement acheminer le trafic à travers le tunnel en utilisant le routage réseau standard.
La méthode utilise
ssh
,
iptables
, les
tun interfaces
et le routage.
Vous devez d'abord définir ces paramètres dans
sshd_config
. Comme nous apportons des modifications aux interfaces des systèmes distant et client, nous avons
besoin des privilèges root des deux côtés .
PermitRootLogin yes PermitTunnel yes
Établissez ensuite une connexion ssh à l'aide d'un paramètre qui demande l'initialisation des périphériques tun.
localhost:~
Maintenant, nous devrions avoir un périphérique tun lors de l'affichage des interfaces (
# ip a
). L'étape suivante ajoutera des adresses IP aux interfaces de tunnel.
Côté client SSH:
localhost:~
Côté serveur SSH:
remoteserver:~
Nous avons maintenant une route directe vers un autre hôte (
route -n
et
ping 10.10.10.10
).
Vous pouvez router n'importe quel sous-réseau via l'hôte de l'autre côté.
localhost:~
Sur le côté distant, vous devez activer
ip_forward
et
iptables
.
remoteserver:~
Boum!
VPN sur tunnel SSH au niveau de la couche réseau 3 . C'est déjà une victoire.
Si vous rencontrez des problèmes, utilisez
tcpdump et
ping
pour déterminer la cause. Puisque nous jouons au niveau 3, nos paquets icmp passeront par ce tunnel.
7. Copie de la clé SSH (ssh-copy-id)
Il existe plusieurs façons, mais cette commande permet de gagner du temps afin de ne pas copier les fichiers manuellement. Il copie simplement ~ / .ssh / id_rsa.pub (ou la clé par défaut) de votre système vers
~/.ssh/authorized_keys
sur le serveur distant.
localhost:~$ ssh-copy-id user@remoteserver
8. Exécution de commandes à distance (non interactive)
La commande
ssh
peut être associée à d'autres commandes pour l'interface conviviale habituelle. Ajoutez simplement la commande que vous souhaitez exécuter sur l'hôte distant comme dernier paramètre entre guillemets.
localhost:~$ ssh remoteserver "cat /var/log/nginx/access.log" | grep badstuff.php
Dans cet exemple,
grep
s'exécute sur le système local après le téléchargement du journal via le canal ssh. Si le fichier est volumineux, il est plus pratique d'exécuter
grep
du côté distant, en plaçant simplement les deux commandes entre guillemets.
Un autre exemple remplit la même fonction que
ssh-copy-id
de l'exemple 7.
localhost:~$ cat ~/.ssh/id_rsa.pub | ssh remoteserver 'cat >> .ssh/authorized_keys'
9. Capture et visualisation de paquets à distance dans Wireshark
J'ai pris l'un de nos
exemples tcpdump . Utilisez-le pour intercepter à distance des paquets avec le résultat directement dans l'interface graphique du Wireshark local.
:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -
10. Copie d'un dossier local sur un serveur distant via SSH
Une belle astuce qui comprime un dossier en utilisant
bzip2
(c'est l'option -j dans la commande
tar
) puis extrait le flux
bzip2
de l'autre côté, créant un doublon du dossier sur le serveur distant.
localhost:~$ tar -cvj /datafolder | ssh remoteserver "tar -xj -C /datafolder"
11. Applications GUI de transfert SSH X11 à distance
Si le client et le serveur distant ont installé X, vous pouvez exécuter à distance la commande GUI, avec une fenêtre sur votre bureau local. Cette fonctionnalité existe depuis longtemps, mais est toujours très utile. Lancez un navigateur Web distant ou même la console VMWawre Workstation, comme je le fais dans cet exemple.
localhost:~$ ssh -X remoteserver vmware
Nécessite la ligne
X11Forwarding yes
dans le fichier
sshd_config
.
12. Copie de fichiers à distance à l'aide de rsync et SSH
rsync
est beaucoup plus pratique que
scp
si vous devez sauvegarder périodiquement un répertoire, un grand nombre de fichiers ou de très gros fichiers. Il existe une fonction pour récupérer de l'échec de transmission et copier uniquement les fichiers modifiés, ce qui économise du trafic et du temps.
Cet exemple utilise la compression
gzip
(-z) et le mode archive (-a), qui permet la copie récursive.
:~$ rsync -az /home/testuser/data remoteserver:backup/
13. SSH sur le réseau Tor
Un réseau Tor anonyme peut
torsocks
le trafic SSH à l'aide de la
torsocks
. La commande suivante lancera un proxy ssh via Tor.
localhost:~$ torsocks ssh myuntracableuser@remoteserver
Torsocks utilisera le port 9050 pour le proxy sur localhost. Comme toujours, lorsque vous utilisez Tor, vous devez vérifier sérieusement quel trafic est tunnelé et autres problèmes de sécurité opérationnelle (opsec).
Où vont vos requêtes DNS?14. Instance SSH vers EC2
Une clé privée est requise pour se connecter à une instance EC2. Téléchargez-le (extension .pem) à partir du panneau de configuration Amazon EC2 et modifiez les autorisations (
chmod 400 my-ec2-ssh-key.pem
). Conservez la clé dans un endroit sûr ou placez-la dans votre dossier
~/.ssh/
.
localhost:~$ ssh -i ~/.ssh/my-ec2-key.pem ubuntu@my-ec2-public
L'
option -i indique simplement au client ssh d'utiliser ce commutateur. Le fichier
~/.ssh/config
est idéal pour configurer automatiquement l'utilisation des clés lors de la connexion à l'hôte ec2.
Host my-ec2-public Hostname ec2???.compute-1.amazonaws.com User ubuntu IdentityFile ~/.ssh/my-ec2-key.pem
15. Édition de fichiers texte à l'aide de VIM via ssh / scp
Pour tous les amateurs de
vim
, cette astuce vous fera gagner un peu de temps. À l'aide de
vim
fichiers sont modifiés à l'aide de scp avec une seule commande. Cette méthode crée simplement le fichier localement dans
/tmp
puis le recopie une fois que nous l'avons enregistré à partir de
vim
.
localhost:~$ vim scp://user@remoteserver//etc/hosts
Remarque: le format est légèrement différent du
scp
standard. Après l'hôte, nous avons double
//
. Ceci est un lien vers le chemin absolu. Une barre oblique signifiera le chemin d'accès par rapport au dossier de départ des
users
.
**warning** (netrw) cannot determine method (format: protocol://[user@]hostname[:port]/[path])
Si vous voyez cette erreur, revérifiez le format de la commande. Cela signifie généralement une erreur de syntaxe.
16. Montage de SSH distant en tant que dossier local avec SSHFS
En utilisant
sshfs
, le client du système de fichiers
ssh
, nous pouvons connecter le répertoire local à un emplacement distant avec toutes les interactions de fichiers dans une session
ssh
chiffrée.
localhost:~$ apt install sshfs
Nous installons le paquet
sshfs
sur Ubuntu et Debian, puis
sshfs
simplement l'emplacement distant sur notre système.
localhost:~$ sshfs user@remoteserver:/media/data ~/data/
17. Multiplexage SSH avec ControlPath
Par défaut, si vous disposez d'une connexion existante au serveur distant à l'aide de
ssh
deuxième connexion à l'aide de
ssh
ou
scp
établit une nouvelle session avec une authentification supplémentaire. L'option
ControlPath
vous permet d'utiliser une session existante pour toutes les connexions suivantes. Cela accélérera considérablement le processus: l'effet est perceptible même sur le réseau local, et encore plus lorsqu'il est connecté à des ressources distantes.
Host remoteserver HostName remoteserver.example.org ControlMaster auto ControlPath ~/.ssh/control/%r@%h:%p ControlPersist 10m
ControlPath indique au socket de vérifier les nouvelles connexions pour une session
ssh
active. La dernière option signifie que même après avoir quitté la console, la session existante restera ouverte pendant 10 minutes, donc pendant ce temps, vous pourrez vous reconnecter au socket existant. Voir l'
ssh_config man
pour plus d'informations.
18. Streaming vidéo sur SSH en utilisant VLC et SFTP
Même les utilisateurs de longue date de
ssh
et
vlc
(Video Lan Client) ne connaissent pas toujours cette option pratique lorsque vous avez vraiment besoin de regarder des vidéos sur le réseau. Dans les paramètres
Fichier | Le programme Open Network Stream vlc
peut entrer l'emplacement comme
sftp://
. Si un mot de passe est requis, une invite apparaît.
sftp://remoteserver//media/uploads/myvideo.mkv
19. Authentification à deux facteurs
La même authentification à deux facteurs que votre compte bancaire ou votre compte Google s'applique au service SSH.
Bien sûr,
ssh
initialement une fonction d'authentification à deux facteurs, ce qui signifie le mot de passe et la clé SSH. L'avantage d'un jeton matériel ou d'une application Google Authenticator est qu'il s'agit généralement d'un périphérique physique différent.
Consultez notre guide de 8 minutes sur l'
utilisation de Google Authenticator et SSH .
20. Hôte sautant avec ssh et -J
Si, en raison de la segmentation du réseau, vous devez traverser plusieurs hôtes ssh pour atteindre le réseau de destination finale, le raccourci -J vous fera gagner du temps.
localhost:~$ ssh -J host1,host2,host3 user@host4.internal
La principale chose à comprendre ici est que cela n'est pas analogue à la
ssh host1
, alors
user@host1:~$ ssh host2
, etc. Le paramètre -J utilise astucieusement le transfert pour que localhost établisse une session avec le prochain hôte de la chaîne. Ainsi, dans l'exemple ci-dessus, notre hôte local s'authentifie auprès de host4. Autrement dit, nos clés localhost sont utilisées et la session de localhost à host4 est entièrement cryptée.
Pour ce faire, spécifiez l'option de configuration
proxyJump dans
ssh_config . Si vous devez régulièrement passer par plusieurs hôtes, l'automatisation via la configuration vous fera gagner beaucoup de temps.
21. Blocage des tentatives de force brute SSH à l'aide d'iptables
Quiconque a exécuté le service SSH et parcouru les journaux connaît le nombre de tentatives de force brute qui se produisent chaque heure chaque jour. Un moyen rapide de réduire le bruit dans les journaux consiste à migrer SSH vers un port non standard. Apportez des modifications au fichier
sshd_config
à l'aide du paramètre de configuration
Port ## .
En utilisant
iptables
, vous pouvez également facilement bloquer les tentatives de connexion à un port après avoir atteint un certain seuil. —
OSSEC , SSH, (HIDS).
22. SSH Escape
ssh
ssh
. . ; , , Microsoft SMB Windows 2003 (- ms08-67?).
enter
,
~C
. , .
localhost:~$ ~C ssh> -h Commands: -L[bind_address:]port:host:hostport Request local forward -R[bind_address:]port:host:hostport Request remote forward -D[bind_address:]port Request dynamic forward -KL[bind_address:]port Cancel local forward -KR[bind_address:]port Cancel remote forward -KD[bind_address:]port Cancel dynamic forward ssh> -L 1445:remote-win2k3:445 Forwarding port.
, 1445 Windows 2003, .
msfconsole
, (, ).
Achèvement
,
ssh
; (
man ssh
,
man ssh_config
,
man sshd_config
).
.
ssh
, .