Automatische Antwort ssh-copy-id in shell-Skript

Ich bin writting ein shell-Skript, und ich will automatisieren Sie die Anmeldung in einem remote-Computer mithilfe von ssh-copy-id, also manuell, wenn ich drucken :

ssh-copy-id -i /root/.ssh/id_rsa [email protected]$4 -p $3 | echo $1

$1 beziehen sich auf Passwort,
$2 beziehen sich auf Benutzername,
$3 beziehen sich auf port, und
$4 beziehen sich auf ip –,
Es ist ok mit, dass, das problem ist, dass ich automatisieren einfügen von Passwort nach :

ssh-copy-id -i /root/.ssh/id_rsa [email protected]$4 -p $3

Füge ich diesem „| printf $1„, aber es funktioniert nicht, es zeigt „Passwort:“ in der Anzeige und warten noch das Passwort ..
Ich hoffe, Sie verstehen mich und ich danke Ihnen.

  • Ich sehe nicht ein, warum Sie brauchen, um zu automatisieren ssh-copy-id so. ssh-copy-id wird verwendet, um die Protokollierung zu aktivieren in den remote-ssh-server über einen ssh-Schlüssel. Das heißt, Sie führen ssh-copy-id einmal, und dann normal einloggen mit ssh.
  • Ich habe eine Menge von Servern, und jede Woche eine Menge von Servern kommt so, deshalb will ich automatisieren, protokollieren.
  • Versuchen Sie es anders herum: echo $1|ssh-copy-id -i /root/.ssh/id_rsa [email protected]$4 -p $3
  • funktioniert immer noch nicht …
  • Mögliche Duplikate von Einbetten das Passwort in der Bash-Skript
  • Ich glaube nicht, dass es ein Duplikat davon. ssh-copy-id wird verwendet, wenn wir wollen, um das setup eine Schlüssel-basierte Authentifizierung, und wir haben das nicht getan bereits. So ist die Lösung aus diesem thread hilft nicht in diesem Fall.

InformationsquelleAutor mosab | 2016-09-01



One Reply
  1. 2

    Als @Leon wies darauf hin, Sie hätten die pipeline nach hinten. Aber auch wenn man es mit der richtigen Reihenfolge, wird es noch nicht funktionieren, weil ssh-copy-id (und alle anderen Programme aus openssh) nicht Lesen Passwörter aus Ihrem stdin. Die Lösung ist die Verwendung der $SSH_ASKPASS Umgebungsvariable. Sie können dies wie folgt: erstellen Sie zuerst ein Hilfs-Skript, sagen /var/tmp/ssh-pass.sh (eigentlich einen besseren Namen als das), mit folgendem Inhalt:

    #!/bin/sh                                                                    
    echo "$PASS"

    Dann können Sie den folgenden Befehl verwenden, um zu erreichen, was Sie gefragt haben, für:

    PASS="$1" SSH_ASKPASS="/var/tmp/ssh-pass.sh" setsid -w ssh-copy-id -i /root/.ssh/id_rsa "$2"@"$4" -p "$3"

    Erklärung: wir verwenden setsid -w zu distanzieren ssh-copy-id Prozess von der aktuell verwendeten Terminals. Das zwingt ssh-copy-id zum ausführen der ausführbaren Datei angegeben, in der $SSH_ASKPASS um das Kennwort zu erhalten. Wir haben festgelegt, unsere eigenen script in die variable, also ssh-copy-id wird ausgeführt, dass nur. Jetzt wird das Skript soll ein Kennwort angeben, um ssh-copy-id von Druck auf seine stdout. Wir verwenden die $PASS variable, um das Passwort an das Skript, so dass das Skript nur drucken, die variable.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.