it-swarm.com.de

Shell-Skript zum Anmelden bei einem SSH-Server

Ich habe versucht, ein Shell-Skript zu schreiben, das sich automatisch mit dem im Skript genannten Kennwort bei einem SSH-Server anmelden kann. Ich habe folgenden Code geschrieben:

set timeout 30
/usr/bin/ssh -p 8484 [email protected]
expect 
{
   "[email protected]'s password" 
   {
      send "password\r" 
   }
}

Dieser Code wird nicht ordnungsgemäß ausgeführt, fragt jedoch nach dem Kennwort. Kann mir bitte jemand bei der Lösung helfen?

29
pradeepchhetri

Ich habe einmal ein expect Skript geschrieben, um mich bei einem SSH-Server anzumelden (wie in Ihrem Fall), und mein Skript war ungefähr so:

#!/usr/bin/expect

spawn ssh [email protected]
expect "password"
send "MyPassword\r"
interact

Ich denke, vielleicht fehlt das interact in Ihrem Skript.

38
saeedn

Du machst es falsch. Sie möchten ein kennwortloses SSH-Schlüsselpaar generieren und dann (solange der Server die RSA-Schlüsselauthentifizierung unterstützt) einsteigen, ohne ein Kennwort für alle eingeben zu müssen. Dies ist ein Sicherheitsrisiko, wenn Ihr privater Schlüssel an einem Ort gespeichert ist, an dem er gestohlen werden könnte.

Folge diesen Schritten:

  1. mkdir -p ~/.ssh
  2. cd ~/.ssh
  3. ssh-keygen -type dsa -i mysshkeys
  4. Drücken Sie Return wenn Sie zur Eingabe einer Passphrase aufgefordert werden
  5. Drücken Sie Return ein zweites Mal zu bestätigen.

In Ihrem Verzeichnis ~/.ssh Befinden sich nun zwei Dateien: mysshkey.pub Und mysshkey. mysshkey.pub Ist Ihr öffentlicher Schlüssel. Dieser Schlüssel kann sicher auf Remote-Servern gespeichert werden. mysshkey ist Ihr privater kennwortloser Schlüssel. Es ist nicht sicher, ihn auf Remote-Servern zu installieren (oder irgendwo, wo jemand anderes eine Kopie erhalten könnte).

Auf dem Server, auf den Sie SSH möchten:

  1. Melden Sie sich beim Remote-Server an
  2. mkdir -p ~/.ssh
  3. Kopieren Sie den Inhalt von mysshkey.pub Und fügen Sie ihn in ~/.ssh/authorized_keys Ein.
  4. Stellen Sie sicher, dass ~/.ssh/authorized_keyschmod 'd zu 600 Ist.

Um es nun auf Ihrem lokalen Computer in die Tat umzusetzen, führen Sie den folgenden Befehl aus:

ssh -i ~/.ssh/mysshkey <remote_server_ip>

Und Sie werden angemeldet, ohne zur Eingabe eines Passworts aufgefordert zu werden.

Dies ist eine sehr bevorzugte Methode zum Verwalten automatisierter Anmeldungen, da Sie Ihr Kennwort nicht an mehreren Stellen fest codieren müssen, die aktualisiert werden müssen, wenn Sie es jemals ändern.

32

Bei Debian-basierten Distributionen bietet das Paket sshpass eine einfachere Möglichkeit, das zu tun, was Sie möchten. Das Paket ist für viele andere beliebte Distributionen verfügbar. Sie müssen es zuerst einrichten:

echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt

Rufen Sie dann den SSH-Befehl über ein Skript wie das folgende auf:

sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 [email protected]

Dies bietet mehr Flexibilität, z. B. wenn Sie ein anderes Gebietsschema verwenden oder das Kennwort ändern müssen, als Lösungen mit expect.

20
likeitlikeit

Installieren Sie zuerst den sshPass Sudo apt-get install sshpass

Erstellen Sie dann einen Alias ​​in der .bashrc-Datei als

alias sshLogin='sshpass -p <your ssh password> ssh [email protected]_Host'

Laden Sie nun Ihre geänderte .bashrc-Datei mit source ~/.bashrc Neu.

Sie sind jetzt fertig.

Jetzt können Sie den ssh mit dem oben erstellten Alias ​​sshLogin im Terminal ausführen.

7
bpathak

sie können dies verwenden:

sshpass -p 'yourpassword'  ssh [email protected]

Alles, was Sie brauchen, um einen Hash-Schlüssel zu erstellen und auf Ihrem PC zu speichern

Tippe einfach

ssh-keygen -t rsa -b 4096 # just press Enter till the end

dann eingeben

ssh-copy-id <user>@<server>

dann logge dich normal mit ein

ssh <user>@<server>

Jetzt brauchen Sie kein Passwort mehr

Hinweis: Das Speichern Ihres Passworts im Klartext ist gefährlich

Diese Methode erstellt einen Hash-Wert Ihres Passworts mithilfe von RSA mit einem öffentlichen Schlüssel der Länge 4096, was sehr sicher ist.

2

SSH Passwordless Login mit SSH Keygen in 5 einfachen Schritten :

Umgebungseinstellung: enter image description here

Schritt 1: Authentifizierung SSH-Kegen Keys on 192.168.0.12)
Melden Sie sich zuerst mit einem Benutzer beim Server 192.168.0.12 an und generieren Sie mit dem folgenden Befehl ein Paar öffentlicher Schlüssel.

--- ((enter image description here

Schritt 2: .ssh-Verzeichnis erstellen unter - 192.168.0.11
Verwenden Sie SSH vom Server 192.168.0.12, um den Server 192.168.0.11 zu verbinden und mit dem folgenden Befehl ein .ssh-Verzeichnis darunter zu erstellen.

(enter image description here

Schritt 3: Generierte öffentliche Schlüssel auf - 192.168.0.11 hochladen
Verwenden Sie SSH vom Server 192.168.0.12 und laden Sie den neu generierten öffentlichen Schlüssel (id_rsa.pub) auf den Server 192.168.0.11 im Verzeichnis .ssh Des Benutzers als Dateinamen autorisierte_Tasten hoch.

(enter image description here

Schritt 4: Berechtigungen festlegen auf - 192.168.0.11
Aufgrund unterschiedlicher SSH-Versionen auf Servern müssen Berechtigungen für das Verzeichnis .ssh Und die Datei authorized_keys Festgelegt werden.

(enter image description here

Schritt 5: Anmeldung von 192.168.0.12 bis 192.168.0.11 Server ohne Passwort
Von nun an können wir uns als Sheena-Benutzer vom Server 192.168.0.12 als Tecmint-Benutzer ohne Passwort bei 192.168.0.11 anmelden.

(enter image description here

1
Premraj

Wie bereits in anderen Antworten beschrieben, verwende ich auch sshpass, kombiniere es jedoch mit dem Befehl read, um mein Kennwort in einer temporären Umgebungsvariablen zu speichern. Auf diese Weise wird mein Passwort niemals klar geschrieben. Hier ist der einzeilige Befehl, den ich benutze:

read -s PASS; sshpass -p $PASS ssh <user>@<Host adress>

Danach müssen Sie Ihr Passwort eingeben (auf dem Bildschirm wird nichts angezeigt) und durch Drücken der Eingabetaste wird die Verbindung geöffnet.

1
StormRider

Das erste Argument ist der Hostname und das zweite das Passwort.

     #!/usr/bin/expect
     set pass [lindex $argv 1]
     set Host [lindex $argv 0]
     spawn ssh -t [email protected]$Host echo Hello
     expect "*assword: "
     send "$pass\n";
     interact

Ausführung: ./script.expect

0
Shivam Mehrotra

Ich habe dies kürzlich getan, dies kann Ihnen helfen:

sshpass -p 'password' [email protected]

wenn dies nicht funktioniert, müssen Sie Schlüssel auf dem anderen Computer generieren, mit dem Sie eine Verbindung herstellen möchten

ssh-keygen

es generiert private und öffentliche Schlüssel und fragt Sie nach einem Speicherort. Lassen Sie diese leer. Es speichert die Schlüssel standardmäßig im .ssh-Ordner. Sie werden standardmäßig nach der Passphrase gefragt. Sie können sie auch leer lassen, indem Sie in den .ssh-Ordner gehen und den ändern Name des öffentlichen Schlüssels für 'autorisierte_Tasten'

cd .ssh/
mv id_rsa.pub authorized_keys
useradd -d /home/username username

dadurch wird der Benutzer zur Liste hinzugefügt. Gehen Sie jetzt zum Ausgangsverzeichnis, geben Sie die Berechtigung und starten Sie die sshd-Dienste neu

chmod 700 /home/username/.ssh
chmod 644 /home/username/.ssh/authorized_keys
chown root:root /home/dozee
Sudo service sshd restart

jetzt müssen Sie den privaten Schlüssel auf das System an der Stelle verschieben, von der aus Sie den Befehl ssh ausführen möchten, und können dann eine Verbindung herstellen

sshpass -p 'password' ssh -i id_rsa [email protected]

wenn auch das nicht funktioniert, gehen Sie in/etc/ssh und öffnen Sie sshd_config mit dem vim-Editor. Überprüfen Sie, ob pubkeyAuthenticatoin auf yes gesetzt ist oder nicht. Wenn Sie es nicht auf yes ändern, starten Sie die sshd-Dienste neu und versuchen Sie es dann, es wird definitiv funktionieren .

0
Utkarsh Gupta