ssh multi-hop… commande d'adaptation au fichier de configuration ssh

9

J'essaie de placer ma commande ssh à sauts multiples dans le fichier ssh .ssh / config.

Voici mon graphe de connexion: ordinateur portable (je suis ici) ------ & gt; utilisateur ------- & gt; poste de travail

J'ai mis les clés rsa publiques ssh dans 'userver' et 'workstation'. En ce moment, je peux me connecter en tapant cette ligne:

ssh -A -t userserver@userver ssh -A userworkstation@workstation

J'aimerais cependant pouvoir utiliser les capacités du fichier de configuration dans ~ / .ssh / config pour obtenir le même effet, mais en utilisant une commande simple, ce qui me permettrait également de faire une copie rapide avec 'scp'. Le seul problème est que "userver" n'a pas la commande "nc" et que je n'ai pas de super-utilisateur là-bas, juste le contrôle de mon dossier personnel. Néanmoins, j'ai essayé certaines choses:

J'ai ce fichier de configuration dans mon ordinateur portable (~ / .ssh / config):

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user

Egalement un autre fichier de configuration dans le serveur (~ / .ssh / config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username

Avec ces fichiers de configuration, je peux me connecter en tant que

ssh -A -t userver ssh -A workstation

ce qui est une amélioration, mais pas suffisante. J'ai essayé d'ajouter un autre hôte dans la configuration de mon ordinateur portable, comme ceci:

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation

Puis, quand je fais

ssh hop

Je reçois la sortie suivante avec des erreurs et je ne peux pas me connecter:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found

Des idées?

labotsirc
la source

Réponses:

6

La commande dont vous avez besoin est ProxyCommand.

Vous devriez mettre dans votre fichier .ssh / config ces lignes:

  Host userver
  HostName userver.example.com
  .........    

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22

Maintenant, vous pouvez vous connecter au poste de travail PC au moyen de

  ssh worksation

Si ce n'est pas clair ou si vous voulez plus de détails, je vous suggère de lire cette excellente introduction ssh multi-sauts.

Modifier:

vous pouvez toujours définir un alias: dans votre fichier /home/votre_nom/.bashrc, ajoutez cette ligne:

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 

(J'ai inséré le -X Cette option vous permet d’exécuter des applications graphiques sur le serveur distant et de les voir localement. si vous ne voulez pas, laissez tomber le -X ).

MariusMatutiae
la source
Bonjour MariusMatutiae, j'ai essayé votre solution, mais comme je l'ai dit dans le message original, le nœud 'utilisateur' manque du programme netcat (nc). Donc, j'obtiens cette erreur: ssh workstation bash: nc: commande non trouvée ssh_exchange_identification: connexion fermée par l'hôte distant
labotsirc
Tu ne peux pas l'installer?
MariusMatutiae
Malheureusement non, je n'ai pas de superutilisateur sur 'userver', c'est pourquoi j'ai essayé une autre méthode. Je ne comprends pas, si cela fonctionne "ssh -A -t userver ssh -A poste de travail", pourquoi la même chose mise sur ProxyCommand ne le fait pas?
labotsirc
1
@labotsirc J'ai légèrement modifié ma réponse. J'espère que vous trouverez cela utile. Vous pouvez également essayer d’installer netcat localement (c’est-à-dire uniquement pour vous!) En ajoutant à la ligne Commande_proxy .... le chemin d'accès complet à votre propre copie de netcat. Je ne suis pas sûr que cela fonctionne, à cause des autorisations, mais vous pouvez l'essayer.
MariusMatutiae
Copié mon fichier binaire netcat, supprimé l'option -q0 car elle donnait des erreurs, et maintenant cela fonctionne! Merci
labotsirc
9

J'ai trouvé que la solution suivante fonctionnait beaucoup mieux que d'utiliser netcat ( nc ) comme dans l'autre exemple. Avec netcat, ma connexion était très lente et restait suspendue jusqu'à ce que je frappe quelques touches. De plus, vous n'avez pas besoin d'installer Netcat.

Ajoutez ce qui suit à votre ~/.ssh/config:

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p

Ensuite, vous pouvez ssh comme ceci:

ssh workstation

Notez également que la raison de votre ProxyCommand ne fonctionne pas parce que vous n'obtenez pas quoi ProxyCommand Est-ce que. ProxyCommand doit créer un tuyau sur lequel ssh peut établir une connexion SSL. En d'autres termes, la commande doit démarrer un processus qui stdin et stdout relier ssh à un sshd Port. Dans votre configuration, vous établissez une connexion ssh avec ProxyCommand qui relie ssh au shell de commande plutôt qu'à un sshd Port.

jcoffland
la source