J'essaie d'exécuter une commande sur SSH comme ceci dans un document ici:
ssh example.com <<END
sudo /etc/init.d/apache2 reload
END
Ce qui fonctionne normalement, sauf lorsque j'essaie d'exécuter quelque chose qui nécessite une entrée, comme le mot de passe pour sudo. Dans ce cas, je reçois le message suivant:
sudo: no tty present and no askpass program specified
Je sais que je peux utiliser l' -t
indicateur sur SSH pour allouer un pseudo-tty comme celui-ci:
ssh -t example.com "sudo /etc/init.d/apache2 reload"
Et ça va marcher, mais quand j'essaye la même chose avec here-document, ça ne marche pas et j'obtiendrai la même erreur à propos de l'absence de tty:
ssh -t example.com <<END
sudo /etc/init.d/apache2 reload
END
Une idée de comment je peux faire fonctionner ça?
De plus, au cas où vous vous demanderiez pourquoi je veux qu'il fonctionne avec le document ici au lieu de simplement le passer sur la même ligne, c'est parce que les commandes d'entrée (il peut y en avoir quelques-unes) proviennent d'un fichier de configuration lu par un script et j'ai entendu dire que cela évitait la peine d'échapper aux commandes pour les guillemets, les guillemets doubles, etc.
Pourquoi ne pas simplement stocker le document ici dans une variable qui sera donnée
ssh -t
comme argument de commande.De manière plus générale, utilisez
ssh -T
ou spécifiez le shell distant comme argument de commande si le stdin de l'hôte distant est redirigé depuis un hérédoc (pour éviterssh
d'essayer d'allouer un pty).la source