J'ai un script qui exécute un autre script via SSH sur un serveur distant en utilisant sudo. Cependant, lorsque je tape le mot de passe, il apparaît sur le terminal. (Sinon ça marche bien)
ssh user@server "sudo script"
Quelle est la bonne façon de faire cela afin que je puisse taper le mot de passe pour sudo sur SSH sans que le mot de passe n'apparaisse lorsque je tape?
ssh <user@server> sudo <script>
, car j'obtenais l'erreursudo: no tty present and no askpass program specified
Réponses:
Une autre façon consiste à utiliser le
-t
commutateur pourssh
:Voir
man ssh
:la source
ssh -t localhost <<< "sudo touch file;"
EDIT Apparemment, il est important que vous fournissiez réellement la commande en tant que paramètre, pas par le biais de standard in (ce qui a du sens avec le recul).-t
méthode affichera également la sortie colorée des commandes qui le font normalement.J'ai pu l'automatiser entièrement avec la commande suivante:
Avantages:
En ce qui concerne la sécurité: comme Kurt l'a dit, exécuter cette commande affichera votre mot de passe sur votre historique bash local, et il est préférable de sauvegarder le mot de passe dans un fichier différent ou de sauvegarder la commande all dans un fichier .sh et de l'exécuter. REMARQUE: le fichier doit disposer des autorisations appropriées pour que seuls les utilisateurs autorisés puissent y accéder.
la source
-t
, mais je n'avais pas lu le manuel assez attentivement pour voir que tu pouvais le passer deux fois! C'est ce que je cherchais depuis des mois! Pour plus de sécurité, j'ai simplement défini une variable de mot de passe avant d'exécuter avecread -s -p "Password: " pw
, puis je l'ai faitecho "$pw" | ....
. J'ai maintenant roulé ceci dans un script pratique pour moi :).En supposant que vous ne vouliez pas d'invite de mot de passe :
Exemple
la source
Sudo sur SSH en passant un mot de passe, aucun tty requis:
Vous pouvez utiliser sudo sur ssh sans forcer ssh à avoir un pseudo-tty (sans l'utilisation du commutateur ssh "-t") en disant à sudo de ne pas exiger de mot de passe interactif et de simplement récupérer le mot de passe de stdin. Pour ce faire, utilisez le commutateur "-S" sur sudo. Cela permet à sudo d'écouter le mot de passe sur stdin et d'arrêter d'écouter lorsqu'il voit une nouvelle ligne.
Exemple 1 - Commande à distance simple
Dans cet exemple, nous envoyons une
whoami
commande simple :Nous disons à sudo de ne pas émettre d'invite et de prendre ses entrées de stdin. Cela rend le mot de passe sudo passant complètement silencieux de sorte que la seule réponse que vous obtenez est la sortie
whoami
.Cette technique a l'avantage de vous permettre d'exécuter des programmes via sudo sur ssh qui eux-mêmes nécessitent une entrée stdin. C'est parce que sudo consomme le mot de passe sur la première ligne de stdin, puis laisse le programme qu'il exécute continuer à saisir stdin.
Exemple 2 - Commande à distance qui nécessite son propre stdin
Dans l'exemple suivant, la commande distante "cat" est exécutée via sudo, et nous fournissons des lignes supplémentaires via stdin pour que le chat distant les affiche.
La sortie montre que le
<remote_sudo_password>
ligne est consommée par sudo et que le chat exécuté à distance affiche alors les lignes supplémentaires.Un exemple où cela serait utile est si vous souhaitez utiliser ssh pour passer un mot de passe à une commande privilégiée sans utiliser la ligne de commande. Dites, si vous souhaitez monter un conteneur chiffré distant sur ssh.
Exemple 3 - Montage d'un conteneur VeraCrypt distant
Dans cet exemple de script, nous montons à distance un conteneur VeraCrypt via sudo sans aucun texte d'invite supplémentaire:
Il convient de noter que dans tous les exemples de ligne de commande ci-dessus (tout sauf le script), la
<< EOF
construction sur la ligne de commande entraînera l'enregistrement de tout ce qui est tapé, y compris le mot de passe, dans .bash_history de la machine locale . Il est donc fortement recommandé que pour une utilisation dans le monde réel, utilisez le faire entièrement via un script, comme l'exemple veracrypt ci-dessus, ou, si vous êtes sur la ligne de commande, mettez le mot de passe dans un fichier et redirigez ce fichier via ssh.Exemple 1a - Exemple 1 sans mot de passe de ligne de commande local
Le premier exemple deviendrait ainsi:
Exemple 2a - Exemple 2 sans mot de passe de ligne de commande local
et le deuxième exemple deviendrait:
Il n'est pas nécessaire de mettre le mot de passe dans un fichier séparé si vous placez le tout dans un script, car le contenu des scripts ne finit pas dans votre historique. Cela peut néanmoins être utile au cas où vous souhaiteriez autoriser les utilisateurs qui ne devraient pas voir le mot de passe à exécuter le script.
la source
cat
et de diriger les résultats vers sudo? Pouvez-vous simplement utilisersudo
comme commande principale à distance ssh?cat
est utilisée pour diriger le mot de passe de l'utilisateur vers sudo de l'autre côté. Si l'utilisateur peut exécuter sudo sans mot de passe, ce n'est pas obligatoire, mais je ne suggère pas cette configuration. La raison pour laquelle il est envoyé est d'empêcher le mot de passe de s'afficher sur la ligne de commande du système distant. Les lignes de commande ne sont pas sécurisées, tout utilisateur peut voir chaque ligne de commande avecps auxwww
.cat
dans la commande sshcat \| sudo --prompt="" -S...
. Si les-S
forcessudo
pour lire le mot de passe de stdin, le chat et le tuyau sont-ils vraiment nécessaires? La commande ssh pourrait-elle être simplementsudo --prompt="" -S...
?Le meilleur moyen est
ssh -t user@server "sudo <scriptname>"
, par exemplessh -t user@server "sudo reboot"
. Il demandera d'abord le mot de passe de l'utilisateur, puis de root (puisque nous exécutons le script ou la commande avec le privilège root.J'espère que cela a aidé et dissipé votre doute.
la source
NOPASS
dans la configuration sur votre machine cible est la solution. Continuez à lire sur http://maestric.com/doc/unix/ubuntu_sudo_without_passwordla source
la source
J'ai fait face à un problème,
Puis j'ai essayé avec
n'a pas fonctionné
qui a fonctionné correctement!
la source
En fonction de votre utilisation, j'ai eu du succès avec ce qui suit:
Cela demandera le mot de passe root, puis exécutera la commande correctement.
la source