Aller au contenu

ssh - Accès à distance sécurisé Shell

Copier toutes les commandes Générer PDF

Commandes SSH complètes pour l'accès sécurisé à distance, le tunnelage et l'administration du système sur toutes les plateformes.

Connexion de base

Connexion simple

Command Description
ssh user@hostname Connect to remote host
ssh user@192.168.1.100 Connect using IP address
ssh -p 2222 user@hostname Connect to custom port
ssh hostname Connect with current username

Options de connexion

Command Description
ssh -v user@hostname Verbose output for debugging
ssh -vv user@hostname More verbose output
ssh -vvv user@hostname Maximum verbosity
ssh -q user@hostname Quiet mode (suppress warnings)

Méthodes d'authentification

Authentification du mot de passe

# Standard password login
ssh user@hostname

# Force password authentication
ssh -o PreferredAuthentications=password user@hostname

# Disable password authentication
ssh -o PasswordAuthentication=no user@hostname

Authentification par clé

# Generate SSH key pair
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
ssh-keygen -t ed25519 -C "your_email@example.com"  # Modern, secure

# Copy public key to remote server
ssh-copy-id user@hostname
ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostname

# Manual key installation
cat ~/.ssh/id_rsa.pub|ssh user@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
```_

### Gestion des clés
|Command|Description|
|---------|-------------|
|`ssh-keygen -t ed25519`|Generate Ed25519 key (recommended)|
|`ssh-keygen -t rsa -b 4096`|Generate 4096-bit RSA key|
|`ssh-keygen -f ~/.ssh/custom_key`|Generate key with custom name|
|`ssh-add ~/.ssh/private_key`|Add key to SSH agent|
|`ssh-add -l`|List loaded keys|
|`ssh-add -D`|Remove all keys from agent|

## Configuration

### Config client SSH (~/.ssh/config)
```bash
# Global defaults
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
    TCPKeepAlive yes

# Specific host configuration
Host myserver
    HostName server.example.com
    User myusername
    Port 2222
    IdentityFile ~/.ssh/myserver_key
    ForwardAgent yes

# Jump host configuration
Host target
    HostName 192.168.1.100
    User admin
    ProxyJump jumphost

Host jumphost
    HostName jump.example.com
    User jumpuser
```_

### Options communes de configuration
|Option|Description|Example|
|--------|-------------|---------|
|`HostName`|Real hostname or IP|`HostName server.example.com`|
|`User`|Username for connection|`User admin`|
|`Port`|SSH port number|`Port 2222`|
|`IdentityFile`|Private key file|`IdentityFile ~/.ssh/id_rsa`|
|`ForwardAgent`|Enable agent forwarding|`ForwardAgent yes`|
|`Compression`|Enable compression|`Compression yes`|

## Transbordement et tunnel

### Transmission locale des ports
```bash
# Forward local port to remote service
ssh -L 8080:localhost:80 user@hostname

# Forward to different remote host
ssh -L 3306:database.internal:3306 user@gateway

# Multiple port forwards
ssh -L 8080:localhost:80 -L 3306:localhost:3306 user@hostname

Transfert de port à distance

# Forward remote port to local service
ssh -R 8080:localhost:3000 user@hostname

# Allow remote connections to forwarded port
ssh -R 0.0.0.0:8080:localhost:3000 user@hostname

Transmission dynamique des ports (SOCKS Proxy)

# Create SOCKS proxy on local port 1080
ssh -D 1080 user@hostname

# Use with applications
# Configure browser to use SOCKS proxy: localhost:1080

X11 Transmission

# Enable X11 forwarding for GUI applications
ssh -X user@hostname

# Trusted X11 forwarding
ssh -Y user@hostname

# Run GUI application
ssh -X user@hostname firefox

Intégration du transfert de fichiers

SCP Intégration

# Copy file to remote host
scp file.txt user@hostname:/path/to/destination/

# Copy from remote host
scp user@hostname:/path/to/file.txt ./

# Recursive copy
scp -r directory/ user@hostname:/path/to/destination/

SFTP Intégration

# Start SFTP session
sftp user@hostname

# SFTP with custom port
sftp -P 2222 user@hostname

Caractéristiques avancées

Sauter les hôtes et les serveurs de bastion

# Connect through jump host
ssh -J jumphost user@target

# Multiple jump hosts
ssh -J jump1,jump2 user@target

# Using ProxyCommand
ssh -o ProxyCommand="ssh -W %h:%p jumphost" user@target

Agent SSH et gestion des clés

# Start SSH agent
eval $(ssh-agent)

# Add key to agent
ssh-add ~/.ssh/id_rsa

# Add key with timeout (1 hour)
ssh-add -t 3600 ~/.ssh/id_rsa

# List agent keys
ssh-add -l

# Remove specific key
ssh-add -d ~/.ssh/id_rsa

# Remove all keys
ssh-add -D

Multiplexage de connexion

# Enable connection sharing in ~/.ssh/config
Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 600

# Create socket directory
mkdir -p ~/.ssh/sockets

Sécurité et durcissement

Options de connexion sécurisées

# Disable password authentication
ssh -o PasswordAuthentication=no user@hostname

# Use specific key only
ssh -o IdentitiesOnly=yes -i ~/.ssh/specific_key user@hostname

# Disable host key checking (development only)
ssh -o StrictHostKeyChecking=no user@hostname

# Use specific cipher
ssh -c aes256-ctr user@hostname

Vérification de la clé de l'hôte

# Check host key fingerprint
ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub

# Remove host key from known_hosts
ssh-keygen -R hostname

# Add host key manually
ssh-keyscan hostname >> ~/.ssh/known_hosts

Authentification fondée sur un certificat

# Generate user certificate
ssh-keygen -s ca_key -I user_id -n username user_key.pub

# Use certificate for authentication
ssh -o CertificateFile=user_key-cert.pub user@hostname

Dépannage

Problèmes de connexion

# Debug connection problems
ssh -vvv user@hostname

# Test specific authentication method
ssh -o PreferredAuthentications=publickey user@hostname

# Check SSH service status
systemctl status ssh  # Linux
service ssh status    # Linux (older)

Problèmes et solutions communs

Problem Symptoms Solution
Permission denied Authentication fails Check key permissions (600 for private key)
Connection timeout No response Check firewall, network connectivity
Host key verification failed Key mismatch warning Update known_hosts or verify host identity
Agent forwarding not working Keys not available on remote Enable ForwardAgent in config

Principaux problèmes liés à la permission

# Fix SSH key permissions
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 644 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts
chmod 600 ~/.ssh/config

Automatisation et écriture

Non-inactif SSH

# Run single command
ssh user@hostname "ls -la /var/log"

# Run multiple commands
ssh user@hostname "cd /var/log && tail -f syslog"

# Execute local script on remote host
ssh user@hostname 'bash -s' < local_script.sh

# Execute with sudo
ssh user@hostname "sudo systemctl restart nginx"

Opérations par lots

#!/bin/bash
# Deploy to multiple servers

servers=("web1.example.com" "web2.example.com" "web3.example.com")

for server in "$\\\\{servers[@]\\\\}"; do
    echo "Deploying to $server"
    ssh user@$server "cd /var/www && git pull origin main"
    ssh user@$server "sudo systemctl restart nginx"
done

SSH avec expect (Automatisation des mots de passe)

#!/usr/bin/expect
spawn ssh user@hostname
expect "password:"
send "your_password\r"
interact

Optimisation des performances

Compression et vitesse

# Enable compression
ssh -C user@hostname

# Disable compression for fast networks
ssh -o Compression=no user@hostname

# Use faster cipher for trusted networks
ssh -c arcfour user@hostname

Persistance de connexion

# Keep connection alive
ssh -o ServerAliveInterval=60 user@hostname

# Persistent connection in background
ssh -f -N -L 8080:localhost:80 user@hostname

Considérations spécifiques à la plateforme

Windows (OpenSSH)

# Windows OpenSSH client
ssh user@hostname

# Windows SSH config location
%USERPROFILE%\.ssh\config

# Start SSH agent on Windows
Start-Service ssh-agent
ssh-add ~/.ssh/id_rsa

macOS Intégration des porte-clés

# Add key to macOS keychain
ssh-add --apple-use-keychain ~/.ssh/id_rsa

# Configure automatic keychain loading
Host *
    AddKeysToAgent yes
    UseKeychain yes

Meilleures pratiques

Sécurité

  1. Utiliser l'authentification des clés : Désactiver l'authentification du mot de passe
  2. Strong Keys: utiliser Ed25519 ou 4096 bits RSA clés
  3. Rotation des clés: Tourner régulièrement les clés SSH
  4. ** Principe du moindre privilège** : Limiter l'accès des utilisateurs
  5. Monitor Access: Loger et surveiller les connexions SSH

Gestion de la configuration

  1. Config centralisé: Utilisez ~/.ssh/config pour les paramètres communs
  2. Host Aliases: Créer des alias d'hôte significatifs
  3. Connection multiplexage: Réutiliser les connexions pour l'efficacité
  4. ** Agent chargé de la transmission** : Utiliser avec précaution, seulement si nécessaire
  5. Documentation: Configurations personnalisées des documents

Opérations

  1. Les clés de sauvegarde: Sauvegarder en toute sécurité les clés privées
  2. ** Connexions de test**: Tester régulièrement l'accès SSH
  3. Mise à jour du logiciel: Gardez à jour le client/serveur SSH
  4. Logs de veille: Surveillez les activités suspectes
  5. Accès d'urgence: Maintenir d'autres méthodes d'accès