Comment définir la sortie ssh dynamique en variable zsh?

0

Je voudrais définir une variable à la sortie d'une commande ssh en zsh. La commande ssh elle-même se connecte à un premier serveur, puis à nouveau ssh depuis ce serveur vers un deuxième serveur sur lequel je veux exécuter ma commande.

Voici la commande (fonctionne bien lorsque vous tapez dans le shell):

ssh -t host1 "ssh -t host2 "uname -a""

J'ai une configuration de clé ssh pour host1, donc la connexion ne demande pas de mot de passe. Je n'en ai pas pour la connexion suivante entre host1 et host2, je dois donc taper le mot de passe.

Maintenant, je voudrais enregistrer le contenu de uname dans une variable, à utiliser dans mon script zsh. J'ai essayé naïvement:

a=$(ssh -t host1 "ssh -t host2 "uname -a"")

mais il semble rester bloqué pour toujours, en quelque sorte l'invite de connexion interactive avec mot de passe ne me sera pas redirigée. Si j'essaye un echo $a ensuite j'ai eu un user@host2's password:' pour le confirmer

Je suppose que quelque chose a mal tourné dans la façon dont zsh traite les guillemets et les guillemets, mais je ne pouvais pas trouver quoi. J'ai essayé de nombreuses variantes, sans succès.

pixelastic
la source

Réponses:

0

Ce n'est certainement pas lié à la citation (qui devrait probablement être ssh -t host1 "ssh -t host2 \"uname -a\"" ). Les guillemets s'appliquent uniquement aux arguments de la ligne de commande, pas à la commande entrée / sortie. Seulement $() peut affecter la sortie.

Le problème pourrait être simplement comment ssh gère les entrées / sorties tty. Il paraît que ssh (ici ssh -t host1 ) Est-ce que ne pas utiliser le terminal côté client même s'il en a un - il écrit sur stdout à la place, ce qui $() va capturer.


La meilleure solution serait de mettre en place une authentification par clé entre local et hôte2 , puis ajoutez vos clés à ssh-agent et utilisez l’option "Transfert d’agent": ssh -A host1 ssh host2 uname -a. De cette façon, vous n'avez pas besoin de copier votre clé privée ailleurs.

grawity
la source
Merci. Je ne peux pas définir manuellement l'authentification par clé entre local et host2 (en réalité, le but du script que j'essaie d'écrire était de l'automatiser). Je ne connaissais pas non plus l'option -A et j'ai finalement trouvé une solution alternative: exécuter mon script directement à partir de host1. Merci pour les pointeurs!
pixelastic