Réponses:
C'est très simple avec des versions assez récentes d'OpenSSH si vous planifiez à l'avance.
Ouvrez une connexion principale la première fois. Pour les connexions suivantes, acheminez les connexions esclaves via la connexion maître existante. Dans votre ~/.ssh/config
, configurez le partage de connexion pour qu'il se produise automatiquement:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
Si vous démarrez une session ssh avec la même connexion (utilisateur, port, machine) qu'une connexion existante, la seconde session sera tunnelée sur la première. L'établissement de la deuxième connexion ne nécessite aucune nouvelle authentification et est très rapide.
/var/log/secure
et /var/log/auth.log
journaliser les connexions SSH; une connexion esclave n'y apparaît pas car elle se greffe sur une connexion existante. Si votre session ssh alloue un terminal (c'est- ssh somehost
à- dire sans commande fournie ssh -t
) ou , qui est (normalement) connecté wtmp
, quelle que soit l'apparence de ce terminal (quelle que soit la méthode utilisée pour établir la connexion, l'application de l'émulateur de terminal,…).
ControlPersist 600
un délai en secondes avant que le socket ne soit inactif avant d'être automatiquement supprimé. Sinon, il se fermera automatiquement à la fin de la connexion principale. Ce n'est pas bon pour exécuter une série de commandes à distance (par exemple une série de commandes rsync dans différents dossiers)
-S
(spécifier le socket) et -M
(créer une connexion maître) du client SSH.
C'est assez facile à réaliser en utilisant l' outil nc et les tunnels ssh.
Dans votre session SSH, tapez ~Csur une nouvelle ligne. Vous obtiendrez l'invite ssh "service console" qui ressemble à ceci:
ssh>
Tapez la commande de transfert local pour ouvrir un tunnel ssh:
ssh> -L22000:targethost:22001
Forwarding port.
Où targethost
est le nom d'hôte ou l'adresse IP de la machine à laquelle vous êtes connecté.
Maintenant, en supposant que le serveur ssh de la machine cible n’ait pas été configuré pour interdire les tunnels, vous disposez du transfert de connexion souhaité: le ssh
client de votre machine écoute le port 22000 et transfère le trafic qui lui est envoyé sur le port 22001 targethost
.
C'est aussi simple que d'entrer dans votre session ssh déjà ouverte la commande suivante:
remote$ nc -l localhost 22001 | sh
Cela démarrera un serveur TCP à l'écoute sur le port 22001 - qui est le port cible de notre tunnel ssh - et acheminera les données reçues (vraisemblablement des commandes shell) vers une targethost
instance shell.
local$ cat yourscript.sh | nc localhost 22000
Ceci enverra le corps du script à votre tunnel ssh et sera exécuté dans un shell sur le targethost
. Vous verrez la sortie du script dans votre terminal avec une session ssh.
Je noterai également que le tunnel ssh (étape 1) de ce scénario n'est pas strictement requis; Vous pouvez également démarrer le serveur et vous y connecter directement via Internet. Cependant, vous devrez utiliser le tunnel si l'hôte cible ne peut pas être atteint directement (par exemple derrière un NAT) ou si le cryptage SSH est souhaité.
~
caractère doit être placé après une nouvelle ligne, ce qui en LF ~ C
fait probablement une meilleure séquence.
less
, le pageur par défaut commun, prend en charge la recherche, ce qui peut vous faire économiser du défilement si vous connaissez vos mots-clés: man ssh
/ESCAPE
il vous suffit de taper et vous y êtes.