Wie richte ich SSH ein, damit ich mein Passwort nicht eingeben muss, wenn ich mich mit einem Host verbinde?
~/.ssh/config
jetzt erforderlichen PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Wie richte ich SSH ein, damit ich mein Passwort nicht eingeben muss, wenn ich mich mit einem Host verbinde?
~/.ssh/config
jetzt erforderlichen PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Antworten:
Wenn Sie GNOME verwenden, kann die Anwendung seahorse ("Passwörter und Verschlüsselungsschlüssel") dies für Sie tun: Datei -> Neu -> Secure Shell-Schlüssel .
Wenn Sie das Terminal bevorzugen, führen Sie den Befehl aus, um ein Schlüsselpaar zu generieren. Gültige Schlüsselpaartypen sind:ssh-keygen -t <type>
Das Programm fragt Sie nach einer Passphrase und einem Speicherort für den neuen Schlüssel. Es wird empfohlen, den vorgeschlagenen Standardpfad zu verwenden, da alle anderen Tools dort danach suchen.
Auch hier kann seahorse dies häufig für Sie tun. Klicken Sie in My Personal Keys mit der rechten Maustaste auf Ihren SSH-Schlüssel und wählen Sie Configure Key for Secure Shell .
Oder ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
im Terminal.
Oder ganz manuell Schritt für Schritt:
.ssh
im Ausgangsverzeichnis des Remotebenutzers auf dem Remotehost angegeben ist.authorized_keys
(falls noch nicht vorhanden).umask
liberaler als üblich ist, machen sich die Datei nicht Gruppe beschreibbare: chmod go-w ~/.ssh ~/.ssh/authorized_keys
.~/.ssh/id_rsa.pub
) in die Remote- ~/.ssh/authorized_keys
Datei.Wenn Sie Ihren privaten Schlüssel in einen ssh- Agenten laden , speichert dieser den entschlüsselten Schlüssel im Speicher. Damit soll vermieden werden, dass das Kennwort bei jedem Shell-Vorgang auf einem Server erneut eingegeben wird.
Zunächst muss der Agent gestartet oder der Pfad eines gestarteten Kommunikations-Sockets in eine Variable geladen werden. Wenn Sie ssh-agent auf einem Terminal ausführen, werden Befehle zum Zuweisen und Setzen der Agentenvariablen generiert. Diese Befehle können zur Verwendung in einem anderen Terminal in einer Datei gespeichert werden. Alternativ könnte man diese Befehle ausführen und vergessen, denselben Agenten in einem anderen Terminal erneut zu verwenden. zB: eval $(ssh-agent)
.
Das Laden des Schlüssels ist eine einfache Sache, die Passphrase auszuführen ssh-add
und ihm zu geben.
Wenn Sie GNOME verwenden, bietet der gnome-keyring-daemon normalerweise die gleiche SSH-Agent-Funktionalität wie der ssh-agent. Sie sollten also nichts starten müssen. GNOME lädt und entsperrt den Schlüssel automatisch auch beim Anmelden.
Wenn alles richtig gemacht wurde, werden Sie bei Verwendung von nicht zur Eingabe eines Kennworts aufgefordert. Wenn mit dem Agenten und nicht mit dem Schlüssel etwas nicht stimmt, werden Sie aufgefordert, die Passphrase für den Schlüssel und nicht das Kennwort für das Benutzerkonto einzugeben.ssh user@server
Alles, was ssh für die Kommunikation verwendet, funktioniert ohne Eingabe des Benutzerkontokennworts, wenn der richtige Schlüssel im Agenten geladen ist. Programme wie scp , sftp und rsync machen davon Gebrauch.
id_dsa
anstelle von id_rsa
und ECDSA wird haben id_ecdsa
.authorized_keys2
- es ist jedoch sehr unwahrscheinlich, dass etwas älter als 5.0 verwendet wird.lsh
, ssh.com
Und andere (Unix und nicht) SSH - Server sind nicht in diesem Tutorial enthalten.Kopieren des öffentlichen Schlüssels auf einen Remote-Host:
ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # this cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \ 'mkdir -p ~ / .ssh; cat >> ~ / .ssh / authorized_keys '# oder so
ssh-agent> ~ / .ssh / terminalübergreifender Agent . ~ / .ssh / terminalübergreifender Agent
ssh-copy-id
, der den öffentlichen Schlüssel auf den Zielhost kopiert und Berechtigungen automatisch festlegt.
ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address
(einfach austauschen username@server-ip-or-address
).
Sie haben nicht angegeben, auf welchem Unix Sie sich befinden, mit welchem Unix Sie sich verbinden, welche Shell Sie verwenden, welche SSH-Variante Sie verwenden usw. Einige davon müssen möglicherweise leicht angepasst werden. Dies basiert auf einigermaßen aktuellen Versionen von OpenSSH, das auf vielen Unix-Varianten verwendet wird.
Dies ist alles von Ihrem lokalen Desktop-System.
ssh-keygen
Stellen Sie sicher, dass Sie die Standardeinstellung für den Schlüsselnamen verwenden. Ich schlage vor , dass Sie tun auf diesem Schlüssel ein Passwort gesetzt, andernfalls wird es ein Sicherheitsproblem ist. "-t rsa" wäre keine schlechte Idee, wird aber wahrscheinlich nicht benötigt.
ssh-copy-id username@server
Daraufhin werden Sie nach dem Kennwort gefragt, mit dem Sie sich anmelden möchten, und das authorised_keys-Zeug wird für Sie eingerichtet. (keine Notwendigkeit, es von Hand zu tun)
Dann das:
`ssh-agent`
oder vielleicht das:
exec ssh-agent sh
oder:
exec ssh-agent bash
Dadurch wird ein SSH-Agent gestartet, der Ihren Schlüssel enthalten kann. Bei vielen modernen Unix-Varianten hat dies bereits stattgefunden, wenn Sie grafisch angemeldet sind. Die erste Variante (mit den Backticks) stellt einen ssh-Agenten in den Hintergrund und richtet die Umgebungsvariablen ein, um mit ihm zu sprechen. Bei den zweiten beiden führt der Agent eine Shell für Sie aus, sodass der Agent beim Beenden der Shell beendet wird.
In vielen modernen Unix-Varianten wird bereits ein Agent für Sie ausgeführt, insbesondere wenn Sie sich grafisch angemeldet haben. Sie könnten versuchen " ps aux | grep ssh-agent
" oder " ps -ef | grep ssh-agent
"; Wenn schon etwas läuft, benutze das.
Dann endlich:
ssh-add
Es wird nach einer Passphrase gefragt. gib es dem, den du ssh-keygen gegeben hast. Es gibt auch Möglichkeiten, es grafisch abzufragen. Und Sie können den ssh-agent und das ssh-add-Zeug in Ihre Anmeldeskripte einfügen (Setup ist je nach verwendeter Shell unterschiedlich), aber einige Unix-Varianten (z. B. aktuelles Ubuntu Linux) tun dies meistens automatisch Alles, was Sie wirklich tun müssen, ist, einen Schlüssel zu erstellen und ihn mit ssh-copy-id auf dem Remote-Host einzurichten.
Jetzt sollte " ssh username@server
" funktionieren, ohne nach einer Authentifizierung zu fragen. Hinter den Kulissen wird ein Schlüssel verwendet, den der SSH-Agent in der Hand hält, und der Agent wird aufgefordert, die Zaubertricks für die Signatur auszuführen.
Dies ist auch in PuTTY unter Windows möglich.
Sobald Sie das öffentliche / private Schlüsselpaar eingerichtet haben (wie andere Antworten hier zeigen), führen Sie PuttyGen aus. Laden Sie dort den vorhandenen privaten Schlüssel, den Sie bereits eingerichtet haben, und speichern Sie ihn als privaten PuTTY-Schlüssel (ppk).
Klicken Sie dann in PuTTY einfach auf die gespeicherte Sitzung, bei der Sie sich automatisch anmelden möchten, und klicken Sie auf Laden. Gehen Sie von hier aus in Verbindung -> Daten im linken Bereich und geben Sie in "Benutzername für automatische Anmeldung" den Benutzernamen für diesen Remote-Server ein:
Gehen Sie danach zu Connection -> SSH -> Auth und suchen Sie nach dem in PuttyGen erstellten ppk:
Kehren Sie dann zur Sitzungsseite zurück und speichern Sie die zuvor geladene Sitzung.
Bei einer sehr ähnlichen Frage zu ServerFault würde ich die Verwendung von ssh-copy-id empfehlen , die alle Schritte zum Einrichten von Authentifizierungsschlüsseln für Sie ausführt :
ssh-copy-id ist ein Skript, das ssh verwendet, um sich bei einem Remote-Computer anzumelden (vermutlich mit einem Anmeldekennwort, daher sollte die Kennwortauthentifizierung aktiviert sein, es sei denn, Sie haben mehrere Identitäten geschickt verwendet).
Es ändert auch die Berechtigungen für das Home des Remote-Benutzers, ~ / .ssh und ~ / .ssh / authorized_keys, um die Gruppenbeschreibbarkeit zu entfernen (was Sie andernfalls daran hindern würde, sich anzumelden, wenn auf dem Remote-SSHD StrictModes in seiner Konfiguration festgelegt ist).
Wenn die Option -i angegeben ist, wird die Identitätsdatei (standardmäßig ~ / .ssh / identity.pub) verwendet, unabhängig davon, ob sich in Ihrem ssh-agent Schlüssel befinden.
Alles was Sie tun müssen, ist einfach das:
ssh-copy-id user@host
Geben Sie Ihr Passwort einmal ein und Sie können loslegen!
Abgesehen von allem, was bereits zum Festlegen von SSH- Schlüsseln gesagt wurde, empfehle ich Keychain als SSH -Agent- Konsolen-Frontend, mit dem Sie nur einen pro Systemprozess anstatt pro Login verwalten können.
Ich weiß, dass es bereits GNOME- und KDE-Tools gibt, die dasselbe tun, aber wenn Sie der Konsolen-Junkie- Typ sind, ist dies großartig (und kann auf den meisten Unix-Systemen verwendet werden).
Um es zu verwenden, hängen Sie einfach Folgendes an Ihr an ~/.bashrc
(ähnlich wie bei anderen Shells):
if type keychain >/dev/null 2>/dev/null; then
keychain --nogui -q <all your SSH/PGP keys>
[ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
[ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi
http://linuxproblem.org/art_9.html
Dein Zielen
Sie möchten Linux und OpenSSH verwenden, um Ihre Aufgaben zu automatisieren. Daher benötigen Sie eine automatische Anmeldung von Host A / Benutzer a zu Host B / Benutzer b. Sie möchten keine Passwörter eingeben, da Sie ssh aus einem Shell-Skript heraus aufrufen möchten.
Ich habe dieses sehr, sehr kurze Tutorial geschrieben, nachdem ich von WIRKLICH WIRKLICH langen Tutorials wirklich frustriert war, weil es so einfach ist :)
test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"
scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password
ssh destID@destMachine #type password
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
rm /tmp/id_rsa.pub
ssh-keygen
. (Wenn Sie aufgefordert werden, einen Typ anzugeben, gehen Sie folgendermaßen vor ssh-keygen -t rsa
.) Wenn Sie nach einem Dateispeicherort gefragt werden, übernehmen Sie die Standardeinstellung. Wenn Sie nach einer Passphrase gefragt werden, drücken Sie die Eingabetaste, um keine Passphrase einzugeben.cat ~/.ssh/id_rsa.pub
(oder was auch immer der Standardspeicherort der Datei ssh-keygen
war, obwohl Sie eine wirklich alte ssh
Installation haben müssten, damit es anders ist); Kopieren Sie die Ausgabe in Ihre Zwischenablage.~/.ssh/authorized_keys
(falls ~/.ssh
nicht vorhanden, slogin
an einen anderen Ort; dies ist der einfache Weg, um sie mit den richtigen Berechtigungen zu erstellen). Fügen Sie Ihre Zwischenablage (die die id_rsa.pub
vom anderen Host enthält) in diese Datei ein.Wenn Sie alles im Terminal unter Linux erledigen möchten:
Auf dem Host
cd ~ / .ssh /
ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "Kommentartext, falls gewünscht" -f id_ArbitraryName
Die Elemente in {} sind Optionen. Verwenden Sie rsa oder dsa und wählen Sie die Bitgröße (größer ist sicherer).
Anschließend müssen Sie die Berechtigungen zu den Dateien authorized_keys und authorized_keys2 hinzufügen.
cat id_ArbitraryName.pub >> authorized_keys
cat id_AribtraryName.pub >> authorized_keys2
Laden Sie dann die Datei id_AribtraryName in die Box herunter, von der Sie ssh möchten. Wenn die Verbindungsbox auf Unix basiert, ist möglicherweise eine Konfigurationsdatei erforderlich (in Putty hat das jemand oben behandelt).
Auf der Anschlussbox
In Ihrer Konfigurationsdatei - vim ~ / .ssh / config
Hosten Sie example.host.com # oder Ihren Computernamen
Benutzer Benutzername
IdentityFile ~ / .ssh / id_ArbitraryName
Die Konfigurationsdatei benötigt Berechtigungen von 600. Der SSh-Ordner benötigt 700.
Ich hoffe, das hilft, wenn Sie auf das häufig ausgelassene Konfigurationsproblem stoßen.