J'écris un programme en C shell qui fera su
ou Sudo
ou ssh
. Ils veulent tous que leurs mots de passe soient saisis dans la console (TTY) plutôt que stdin ou la ligne de commande.
Est-ce que quelqu'un connaît une solution?
La configuration de Sudo
sans mot de passe n’est pas une option.
s'attendre pourrait être une option, mais ce n'est pas présent sur mon système dépouillé.
Pour Sudo, l'option -S permet d'accepter le mot de passe à partir de l'entrée standard. Voici l'entrée homme:
-S The -S (stdin) option causes Sudo to read the password from
the standard input instead of the terminal device.
Cela vous permettra d’exécuter une commande telle que:
echo myPassword | Sudo -S ls /tmp
En ce qui concerne ssh, j’ai tenté à maintes reprises d’automatiser/d’écrire son utilisation sans succès. Il ne semble pas y avoir de méthode intégrée pour passer le mot de passe dans la commande sans y être invité. Comme d'autres l'ont déjà mentionné, l'utilitaire " expect " semble avoir pour objectif de résoudre ce dilemme mais, en fin de compte, la configuration de l'autorisation de clé privée appropriée est la meilleure solution pour automatiser ce problème.
J'ai écrit un script Applescript qui demande un mot de passe via une boîte de dialogue, puis construit une commande personnalisée bash, comme ceci:
echo <password> | Sudo -S <command>
Je ne suis pas sûr que cela aide.
Ce serait bien si Sudo acceptait un mot de passe pré-chiffré afin que je puisse le chiffrer dans mon script sans m'inquiéter de l'écho des mots de passe en clair. Cependant cela fonctionne pour moi et ma situation.
Pour ssh
, vous pouvez utiliser sshpass
: sshpass -p yourpassphrase ssh user@Host
.
Vous devez juste télécharger sshpass d’abord :)
$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server
J'ai:
ssh user@Host bash -c "echo mypass | Sudo -S mycommand"
Travaille pour moi.
La solution habituelle à ce problème consiste à configurer une application auxiliaire exécutant la tâche nécessitant un accès superutilisateur: http://en.wikipedia.org/wiki/Setuid
Sudo n'est pas destiné à être utilisé hors ligne.
Édition ultérieure: SSH peut être utilisé avec l'authentification par clé privée-publique. Si la clé privée n'a pas de phrase secrète, ssh peut être utilisé sans demander de mot de passe.
Cela peut être fait en configurant des clés publiques/privées sur les hôtes cibles auxquels vous vous connecterez ... .. La première étape consisterait à générer une clé ssh pour l'utilisateur qui exécute le script sur l'hôte local, en exécutant:
ssh-keygen
Enter file in which to save the key (/home/myuser/.ssh/id_rsa): <Hit enter for default>
Overwrite (y/n)? y
Puis entrez un mot de passe vide. Après cela, copiez votre clé ssh sur l'hôte cible auquel vous allez vous connecter.
ssh-copy-id <remote_user>@<other_Host>
remote_user@other_Host's password: <Enter remote user's password here>
Après avoir enregistré les clés ssh, vous pourrez exécuter un ssh remote_user@other_Host
silencieux à partir de votre hôte local.
Pour Sudo, vous pouvez aussi le faire:
Sudo -S <<< "password" command
Jetez un coup d'œil à l'utilitaire expect
linux.
Il vous permet d’envoyer la sortie à stdio sur la base d’une correspondance de modèle simple sur stdin.
Lorsqu'il n'y a pas de meilleur choix (comme suggéré par d'autres), alors socat peut vous aider:
(sleep 5; echo PASSWORD; sleep 5; echo ls; sleep 1) |
socat - EXEC:'ssh -l user server',pty,setsid,ctty
EXEC’utes an ssh session to server. Uses a pty for communication
between socat and ssh, makes it ssh’s controlling tty (ctty),
and makes this pty the owner of a new process group (setsid), so
ssh accepts the password from socat.
Toute la complexité de pty, setsid, ctty est nécessaire et, même si vous n’avez pas besoin de dormir aussi longtemps, vous devrez dormir. L'option echo = 0 mérite également d'être examinée, tout comme le fait de passer la commande à distance sur la ligne de commande de ssh.
Peut-être pouvez-vous utiliser une commande expect
?
expect -c 'spawn ssh [email protected];expect password;send "your-password\n";interact
Cette commande donne le mot de passe automatiquement.
Configurez SSH pour l'authentification par clé publique, sans phrase secrète sur la clé. Charges de guides sur le net. Vous n'aurez pas besoin d'un mot de passe pour vous connecter alors. Vous pouvez ensuite limiter les connexions pour une clé en fonction du nom d'hôte du client. Fournit une sécurité raisonnable et est idéal pour les connexions automatisées.
ssh -t -t [email protected] << EOF
echo SOMEPASSWORD | Sudo -S do something
Sudo do something else
exit
EOF
Vous pouvez fournir un mot de passe en tant que paramètre pour un script.
S'appuyant sur la réponse de @ Jahid, cela a fonctionné pour moi sur macOS 10.13:
ssh <remote_username>@<remote_server> Sudo -S <<< <remote_password> cat /etc/sudoers
J'ai eu le même problème. Le script de dialogue permettant de créer un répertoire sur un PC distant J'utilise sshpass (précédemment installé).
dialog --inputbox "Enter IP" 8 78 2> /tmp/ip
IP=$(cat /tmp/ip)
dialog --inputbox "Please enter username" 8 78 2> /tmp/user
US=$(cat /tmp/user)
dialog --passwordbox "enter password for \"$US\" 8 78 2> /tmp/pass
PASSWORD = $(cat /tmp/pass)
sshpass -p "$PASSWORD" ssh $US@$IP mkdir -p /home/$US/TARGET-FOLDER
rm /tmp/ip
rm /tmp/user
rm /tmp/pass
salutations de l'Allemagne
titus
UTILISATION:
echo password | Sudo command
Exemple:
echo password | Sudo apt-get update; whoami
J'espère que ça aide..