it-swarm.com.de

Geben Sie das Kennwort für den Befehl ssh im Bash-Skript ohne die Verwendung öffentlicher Schlüssel und Expect ein

Ich möchte SSH in einem Skript verwenden, aber dieses Skript wird auf meinem Computer nicht ausgeführt.

In meiner Implementierung gibt es zwei Einschränkungen.

  • Ich kann nicht außerhalb der Shell-Standards arbeiten, daher kann ich expect nicht verwenden, da ich nicht weiß, ob es auf diesem Computer verfügbar sein wird.
  • Ich kann nicht erwarten, dass diese Maschine public keys für das SSH.

Was sind die möglichen Optionen-Lösungen?

Wie kann ich ssh das angeforderte Passwort auf automatisierte und sichere Weise zur Verfügung stellen, ohne zusätzliche Abhängigkeiten hinzuzufügen?

Wird es möglich sein, das Passwort im Skript anzugeben?

Vielen Dank im Voraus :)

19
stratis

Zuallererst: Stecken Sie keine Geheimnisse in Klartext es sei denn Sie wissen, warum dies eine sichere Sache ist (dh Sie haben bewertet, welchen Schaden ein Angreifer anrichten kann, der das Geheimnis kennt).

Wenn Sie mit dem Einfügen von Geheimnissen in Ihr Skript einverstanden sind, können Sie einen SSH-Schlüssel mitliefern und in einer ssh-agent - Shell ausführen:

#!/usr/bin/env ssh-agent /usr/bin/env bash
KEYFILE=`mktemp`
cat << EOF > ${KEYFILE}
-----BEGIN RSA PRIVATE KEY-----
[.......]
EOF
ssh-add ${KEYFILE}

# do your ssh things here...

# Remove the key file.
rm -f ${KEYFILE}

Ein Vorteil der Verwendung von ssh-Schlüsseln ist, dass Sie einfach erzwungene Befehle verwenden können, um zu begrenzen, was der Schlüsselhalter auf dem Server tun kann.

Ein sicherer Ansatz wäre, das Skript ausführen zu lassen ssh-keygen -f ~/.ssh/my-script-key, Um einen privaten Schlüssel zu erstellen, der für diesen Zweck spezifisch ist, aber dann müssten Sie auch eine Routine zum Hinzufügen des öffentlichen Schlüssels zum Server verwenden.

11
Anders Lindahl

Installieren Sie sshpass und starten Sie den Befehl:

sshpass -p "yourpassword" ssh -o StrictHostKeyChecking=no [email protected]
29
gino pilotino

Aus Sicherheitsgründen müssen Sie die Angabe eines Kennworts in einer Befehlszeile vermeiden, da sonst jeder, der den Befehl ps ausführt, Ihr Kennwort sehen kann. Verwenden Sie besser sshpass wie folgt:

#!/bin/bash

export SSHPASS="your-password"
sshpass -e ssh -oBatchMode=no [email protected]

Das könnte Sie interessieren Wie wird der Befehl sftp mit einem Passwort aus dem Bash-Skript ausgeführt?

17
anubhava

AFAIK gibt es keine Möglichkeit neben der Verwendung von Schlüsseln oder erwarten, wenn Sie die Befehlszeilenversion ssh verwenden. Es gibt jedoch Bibliotheksbindungen für die meisten Programmiersprachen wie C, Python, PHP, .... Sie könnten ein Programm in einer solchen Sprache schreiben. Auf diese Weise wäre es möglich, das Passwort automatisch weiterzugeben. Aber Anmerkung das ist natürlich ein Sicherheitsproblem, da das Passwort in diesem Programm im Klartext gespeichert wird

1
hek2mgl