2009-12-17 2 views
7

Ich habe diese Bash-Datei, die IP, Passwort usw. für OpenSSH zu einem Gerät fragt.Bash: Steuern von SSH

Jetzt, wenn ich ssh [email protected] benutze, muss ich das Passwort eingeben. Das ist wirklich irritierend. Zweitens; Ich kann nicht zulassen, dass mein Skript Befehle an es sendet.

Das ist, was ich wollen->

  1. das Passwort nicht Sache; Ich habe schon etwas gefunden; aber es sagt mir, die Befehle nicht gefunden ?:

    #!/usr/bin/expect -f

    spawn ssh [email protected]$IPADDR

    expect "password:"

    sleep 1

    send "$rpass\r"

    1. Ich möchte, dass der Benutzer einige Menüs sehen kann, aus denen er auswählen kann; danach; Jedes Kommando ist für ihn erledigt. Also wie ein neues Fenster oder so?

    2. Ich will nicht verwenden: -Alle externen Sachen -Keine zusätzliche Bearbeitung der SSH-Verbindung

BASH INFO:. GNU Bash, v 4.0.33 (1) -Release (i486-pc-linux-gnu), läuft auf Linux Mint. Aber es wurde für mehrere Linux Distributionen und auch für Mac verfügbar?

+1

Dup: http://stackoverflow.com/questions/1449932 – ephemient

Antwort

2

Viele Tools, um große Anstrengungen zu unternehmen, um das zu verhindern, was Sie tun. Ich empfehle die Verwendung von ssh öffentlichen Schlüsseln, um dieses Problem anstelle von Kennwörtern zu lösen.

Die große Alternative ist, Ihren eigenen modifizierten ssh-Client basierend auf der Open Source zu schreiben, um die Kontrolle über die Passwortverwaltung zu übernehmen.

Oh, nun, ich habe es vergessen. Du kannst das wahrscheinlich mit einem Pty austricksen, denn dann wird/dev/tty das sein, was du kontrollierst. Erwarten könnte Ihnen dabei helfen.

+1

wie gesagt: 'Keine zusätzliche Bearbeitung des SSH connection'; einschließlich öffentlicher Schlüssel. –

+0

Ich könnte anfangen, den ssh-Client zu bearbeiten, aber es wird einige Zeit dauern. Danke fürs Vorschlagen. –

1

Verwenden Sie ssh-keygen, um einen öffentlichen Schlüssel für Ihren Computer zu erstellen, und kopieren Sie dann Ihren lokalen ~/.ssh/id_rsa.pub oder ~/.ssh/identity.pub in das Remote-System unter ~/.ssh/authorized_keys.

Unter Umständen müssen Sie die Berechtigungen für die Datei authorized_keys verschärfen: chmod 600

2

Expect für die Automatisierung von interaktiven Sitzungen das übliche Werkzeug.

+0

Ich gab das schon in meiner Frage, aber ich habe auch nicht laichen und senden. Jetzt muss ich sie wirklich herunterladen, in meinen Ordner legen? So hart. –

+0

Das sind erwartete Befehle, Sie laufen das Skript durch erwarten, ja? –

+0

Spawn und send sind Befehle, die "expect" erkennt. Sie sind keine separaten Downloads. Sie müssen sicherstellen, dass der Pfad zu "expect" für Ihr System im Shebang korrekt ist. Sie werden wahrscheinlich auch den 'interact' Befehl in Ihrem' expect' Skript verwenden wollen. –

1

Haben Sie in Betracht gezogen Paramiko? Es ist eine Python-Bibliothek für die Interaktion mit SSH.

+0

Kann ich mit der Bash interagieren? –

+1

Hängt davon ab, was Sie wollen. Wenn Sie mehr Details darüber gegeben hätten, welches Problem Sie * wirklich * lösen wollen, wäre es einfacher zu helfen. –

+0

Was ich versuche zu tun ist mit Bash eine Art SSH-Client zu machen. Ich mag diese Paramiko-Idee sehr; aber was ich tun muss, ist es mit Bash zu interagieren. Der Code ist in bash geschrieben und ich möchte, dass es so bleibt. Ich kenne Python nicht; Ich bin ein beginnender Programmierer.Sowieso; was ich machen möchte, ist (fast) alles, was mit ssh möglich ist; die Passwort-Sache wie es in Paramiko, CD zu Verzeichnis; Bearbeitung von Berechtigungen; Entfernen von Dateien/Ordnern; Erstellen von Ordnern; Kopieren von Dateien/Ordnern vom PC zum Gerät; etc. –

13

Der richtige Weg, dies zu tun, ohne Passwörter im Klartext auf Ihrem Rechner zu speichern, ist mit ssh.Erster Lauf:

ssh-keygen

Dies wird einen neuen SSH-Schlüssel in ~/.ssh/id_rsa.pub erzeugen. Danach einfach laufen:

ssh-copy-id [email protected]

Wenn Sie unter OS X oder einer anderen Maschine sind, die nicht "ssh-copy-id" hat es gibt eine einzeilige alternatives wie diese:

cat ~/.ssh/id_rsa.pub | ssh user @ machine "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

Letztendlich brauchen Sie nur den Inhalt von ~/.ssh/id_rsa.pub auf dem lokalen Computer zu ~/.ssh/authorized_keys auf dem Remote-Server anzuhängen. Wie Sie das tun, liegt an Ihnen, die oben genannten sind nur schnelle Verknüpfungen, um das zu tun.

+0

Ich würde es lieben, wenn der Downvoter sich selbst erklärt, aber das verlangt wahrscheinlich zu viel. – Chev

1

Auch wenn ich pem Schlüssel für diesen und das ist ein altes Thema verwenden würde, wollte ich auch sshpass

2

Der richtige Weg zitieren zu gehen, ist den Schlüssel zu kopieren, wie hier gesagt wurde. Um der Konversation etwas hinzuzufügen, gibt es Fälle, in denen sshpass nützlich sein kann.

Die Frage bezieht sich speziell auf Skripting in einem System mit SSH. Wenn es um die Entwicklung eines eingebetteten Systems ist, kann es sinnvoll sein, sshpass mit Kommandozeilen-Optionen zu kombinieren, wie es zu diesem Beitrag liest

sshpass -p raspberry ssh [email protected] 

dies mit kombiniert werden können

ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected] 

zur Bestätigung zu vermeiden Fragen, die das Erstellen von Skripts verhindern.

Verwenden Sie dies wiederum nur in Entwicklungssystemen, in denen unterschiedliche Maschinen eine IP teilen und die Sicherheit nicht wichtig ist.

https://ownyourbits.com/2017/02/22/easy-passwordless-ssh-with-sshh/