Je veux exécuter une série de commands sudo-élevées sur une machine distante à partir d'un script incorporé. Pour simplifier la question, j'essaie juste d'exécuter sudo id et de me dire que c'est root.
Je rencontre "sudo: désolé, vous devez avoir un tty pour exécuter sudo" quand j'exécute ce script:
#!/bin/bash ssh -t 192.168.1.100<<EOF sudo id EOF
Mais pas quand je cours ça:
#!/bin/bash ssh -t 192.168.1.100 sudo id
Comment get le premier, avec les désignations de fin de file pour un script incorporé pour respecter le tty forcé à l'autre extrémité du SSH?
Avec le premier, il n'y a pas de tty
pour ssh
car stdin
n'est pas connecté au terminal, c'est un file ici. En fait, si j'essaie d'exécuter une command similaire (sur Debian), j'obtiens l'erreur suivante:
Le pseudo-terminal ne sera pas alloué car stdin n'est pas un terminal.
Pour le faire fonctionner, vous pouvez faire quelque chose comme:
ssh -tt 192.168.1.100 <<EOF sudo -S id password EOF
Bien que ce n'est pas une bonne idée puisque le mot de passe sera en text clair.
Je suis tombé sur une solution facile à ce qui évite d'encoder le mot de passe en text brut, vous pouvez utiliser un programme graphique pour entrer le mot de passe:
ssh -X 192.168.1.100 <<EOF SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A id EOF
Bien sûr, le programme ssh-askpass
doit être installé à l'location indiqué et vous devez exécuter une session X sur la machine sur laquelle vous travaillez. Il y a quelques variations sur le programme ssh-askpass
qui devraient aussi fonctionner (versions Gnome / KDE). Aussi un programme de rlocation sudo
graphique comme gksu
ou kdesudo
devrait faire le travail aussi.