Ein Server lässt SSH-Verbindungen zu, verwendet jedoch keine Authentifizierung mit öffentlichem Schlüssel. Es liegt nicht in meiner Macht, dies im Moment zu ändern (aufgrund technischer Schwierigkeiten, nicht organisatorischer), aber ich werde es so schnell wie möglich tun!
Was ich jetzt brauche, ist die Ausführung von Befehlen auf dem Server unter Verwendung eines normalen alten Kontos + Kennwortauthentifizierung von einem Skript . Das heißt, ich muss es auf nicht interaktive Weise tun. Ist es möglich? Und wie mache ich das?
Der Client, der das Skript ausführt, führt Ubuntu Server 8.04 aus. Auf dem Server werden Cygwin und OpenSSH ausgeführt.
Antworten:
Es gibt ein Linux-Dienstprogramm namens
sshpass
. Sie können damit genau das tun, was Sie möchten, und ein Server-Passwort entweder als Befehlszeilenargument oder aus einer Datei übernehmen (ich bevorzuge dies, sodass mein Server-Passwort nicht im Shell-Verlauf angezeigt wird) und Sie verwenden es wie so:sshpass -f file_with_password ssh user@server ls -la
Dies wird in einen Server ssh und ausgeführt
ls -la
. Eine Sache ist jedoch, dass Sie zuerst manuell auf einen Server ssh müssen (falls Sie dies noch nicht getan haben), damit der Server zu Ihrem Server hinzugefügt wird~/.ssh/known_hosts
. Wenn Sie das nicht tun,sshpass
wird nicht funktionieren.quelle
SSH_ASKPASS
Variablen ist eine allgemeinere Lösung, die auf jedem OpenSSH-System funktioniert und keine Installation zusätzlicher Software erfordert. Für einige von uns (in regulierten Branchen) bedeutet die Installation neuer Software einen hohen Verwaltungsaufwand.SSH_ASKPASS
funktioniert nicht auf allen Systemen. Selbst wenn der Client dies unterstützt, funktioniert es nicht, wenn der Server dies verwendetkeyboard-interactive
. Ich habe dieses Problem tatsächlich beim Schreiben eines Skripts zum Verteilen einerauthorized_keys
Datei auf eine Reihe eingebetteter Maschinen festgestellt .Sie können Expect verwenden , um dies zu tun. Offensichtlich ist dies aus Sicherheitsgründen nicht zu bevorzugen, da Sie ein Skript verwenden müssen, das Ihr Kennwort im Klartext enthält. (Aber ich werde diesen Punkt nicht näher erläutern, da Sie in Ihrer Frage angegeben haben, dass Sie die Authentifizierung mit öffentlichen Schlüsseln so bald wie möglich verwenden möchten!)
quelle
Hängt ein wenig von der verwendeten Skriptsprache ab. Ich schreibe jetzt fast alles in Python, wo dies kein Problem ist. Sowohl mit pyssh als auch mit Paramiko können Sie das Kennwort einfach und ohne großen Aufwand schreiben.
Wenn Sie beabsichtigen, dies mit (ba) sh-Skripten zu tun und OpenSSH zu verwenden, wird es schwieriger. OpenSSH verhindert explizit, dass Sie Kennwörter in die Befehlszeile eingeben (da alle Benutzer die Befehlszeile mit etwas sehen können
ps -fe
, was schlecht für mojo ist). In diesem Fall müssen Sie direkt mit dem ssh-Programm interagieren und haben zwei Möglichkeiten:quelle