Frage

Ich schreibe ein C-Shell-Programm, das su oder sudo oder ssh tun werden. Sie alle wollen ihre Passwörter in Konsoleneingang (TTY), anstatt stdin oder die Befehlszeile.

Kennt jemand eine Lösung?

Einrichten von kennwort weniger sudo ist keine Option.

könnte eine Option sein, aber es ist nicht vor meinem abgespeckte System.

War es hilfreich?

Lösung

Für sudo gibt es eine Option -S für das Passwort von der Standardeingabe zu akzeptieren. Hier ist der Mann Eintrag:

    -S          The -S (stdin) option causes sudo to read the password from
                the standard input instead of the terminal device.

Dies ermöglicht es Ihnen, einen Befehl auszuführen, wie:

echo myPassword | sudo -S ls /tmp

Wie für ssh, ich habe viele Versuche unternommen, zu automatisieren / script es Nutzung ohne Erfolg. Es scheint keinen build-in Weg, um das Passwort in das Kommando zu übergeben, ohne zu fragen. Wie andere erwähnt haben, die „ erwarten “ Dienstprogramm scheint, wie es zur Bewältigung dieses Dilemma richtet sich aber letztlich , die richtige privater Schlüssel Genehmigung der Einrichtung ist der richtige Weg zu gehen, wenn dies zu automatisieren versucht wird.

Andere Tipps

Ich schrieb einige Applescript, die über ein Dialogfeld für die Eingabe eines Kennworts auffordert und dann baut einen benutzerdefinierten bash Befehl wie folgt aus:

echo <password> | sudo -S <command>

Ich bin nicht sicher, ob das hilft.

Es wäre schön, wenn sudo ein Pre-verschlüsseltes Passwort akzeptiert, so konnte ich es in meinem Skript verschlüsseln und sie keine Sorgen über Echo Passwörter im Klartext um. Allerdings funktioniert dies für mich und meine Situation.

Für ssh können Sie sshpass benutzen. sshpass -p yourpassphrase ssh user@host

Sie müssen nur zum Download sshpass zuerst:)

$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server

Ich habe:

ssh user@host bash -c "echo mypass | sudo -S mycommand"

Funktioniert für mich.

Dies kann durch die Einrichtung von öffentlichen / privaten Schlüssel auf den Ziel-Hosts durchgeführt werden Sie verbinden werden. Der erste Schritt wäre, einen SSH-Schlüssel für den Benutzer zu erzeugen, um das Skript auf dem lokalen Rechner ausgeführt wird, durch Ausführen:

ssh-keygen
Enter file in which to save the key (/home/myuser/.ssh/id_rsa): <Hit enter for default>
Overwrite (y/n)? y

Dann ein leeres Passwort eingeben. Danach kopieren Sie Ihren SSH-Schlüssel auf die Ziel-Host, die Sie eine Verbindung herstellen werden.

ssh-copy-id <remote_user>@<other_host>
remote_user@other_host's password: <Enter remote user's password here>

Nach der SSH-Schlüssel der Registrierung, Sie wären in der Lage, eine stille ssh remote_user@other_host von Ihnen lokalen Host auszuführen.

Die übliche Lösung für dieses Problem ist setuiding eine Helfer-Anwendung, die die Aufgabe, die Superuser-Zugriff ausführt: http://en.wikipedia.org/wiki/Setuid

Sudo ist nicht offline gemeint verwendet werden.

Später bearbeiten: SSH mit Private-Public-Key-Authentifizierung verwendet werden. Wenn der private Schlüssel nicht ein Passwort hat, kann ssh ohne Aufforderung für ein Passwort verwendet werden.

Für sudo Sie können dies tun, auch:

sudo -S <<< "password" command

Wenn es gibt keine bessere Wahl (wie von anderen vorgeschlagen), dann ein Mann socat helfen kann:

   (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.

Alle der pty, setsid, CTTY Komplexität ist notwendig, und, wenn Sie nicht so lange schlafen könnte müssen, müssen Sie schlafen. Das Echo = 0 Option ist einen Blick wert zu, wie auf dem SSH-Befehlszeile den Remote-Befehl übergeben.

Vielleicht können Sie einen expect Befehl verwenden:?

expect -c 'spawn ssh root@your-domain.com;expect password;send "your-password\n";interact

Dieser Befehl gibt das Passwort automatisch.

Werfen Sie einen Blick auf expect Linux-Dienstprogramm.

Es ermöglicht Ihnen, Ausgabe senden STDIO basiert auf einfachen Muster auf stdin entsprechen.

SSH Auf dem Schlüssel ohne pasphrase für Public Key-Authentifizierung auf. Lädt der Führer auf dem Netz. Sie werden kein Passwort benötigen dann anmelden. Sie können dann auf dem Client-Host-Namen basierten Verbindungen für einen Schlüssel begrenzen. Bietet eine angemessene Sicherheit und eignet sich hervorragend für die automatisierte Anmeldungen.

ssh -t -t me@myserver.io << EOF
echo SOMEPASSWORD | sudo -S do something
sudo do something else
exit
EOF

Ich hatte das gleiche Problem. Dialogskriptverzeichnis auf dem Remote-PC zu erstellen. Dialog mit ssh ist einfach. Ich benutze sshpass (vorher installiert ist).

   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

Grüße aus Deutschland

titus

USE:

echo password | sudo command

Beispiel:

echo password | sudo apt-get update; whoami

Hoffe, es hilft ..

Aufbauend auf @ Jahid Antwort, das für mich gearbeitet macOS 10.13:

ssh <remote_username>@<remote_server> sudo -S <<< <remote_password> cat /etc/sudoers

Sie können das Kennwort als Parameter angeben Skript zu erwarten.

echo <password> | su -c <command> <user> 

Dies funktioniert.

hartzucodieren ein Passwort in einem Skript erwarten ist das gleiche wie eine passwordless sudo hat, eigentlich noch schlimmer, da sudo zumindest seine Befehle protokolliert.

Eine Möglichkeit wäre, es Option verwenden lesen .. diese Art und Weise der Passwort-Zeichen werden nicht wieder auf den Bildschirm angezeigt. Ich schrieb ein kleines Skript für einige Anwendungsfälle und man kann es in meinem Blog sehen: http://www.datauniv.com/ Blogs / 2013/02/21 / a-quick-little-expect-Skript /

su -c "Command" < "Password"

Ich hoffe, es ist hilfreich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top