Ich möchte mich über ssh bei einer Gegenstelle anmelden können, ohne ständig das Passwort eingeben zu müssen.
- Wie richte ich es ein?
- Ist ein anderer Befehl erforderlich, um eine Sitzung ohne Kennwort auszuführen?
Ich möchte mich über ssh bei einer Gegenstelle anmelden können, ohne ständig das Passwort eingeben zu müssen.
Antworten:
Führen Sie diese Befehle aus:
ssh-keygen
Dann müssen Sie den neuen Schlüssel auf Ihren Server kopieren :
ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"
Nachdem der Schlüssel kopiert wurde, führen Sie ssh wie gewohnt auf dem Computer aus:
ssh user@host
Sie können sich jetzt anmelden, ohne ein Kennwort von dem Computer einzugeben, auf dem Sie die Befehle ausgeführt haben.
not-marco@rinzwind-desktop:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa):
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo. |
|*B.+ . . |
|*=o . o . |
| = . = |
|. o S |
|E. |
| o |
| . |
| |
+-----------------+
not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password:
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
Dies setzt voraus, dass Sie bereits erfolgreich über SSH eine Verbindung zu Ihrem Server herstellen können.
Sie müssen ein SSH-Schlüsselpaar generieren, mit dem Sie sich ohne Kennwort identifizieren können. Wenn Sie möchten, können Sie die Schlüssel mit einem Passwort schützen. Sie können dieses Feld jedoch auch leer lassen, um einen SSH-Zugriff ohne Passwort zu ermöglichen.
ssh-keygen
dieses ausführen, um eine id_rsa
und id_rsa.pub
-Datei zu erstellen . Die pub
Datei wird auf den Servern gespeichert, der private Schlüssel ( id_rsa
) verbleibt bei Ihnen und zeigt an, wie Sie sich identifizieren.ssh-copy-id user@server
indem Sie den Benutzer durch den Remotebenutzer und den Server mit dem DNS-Namen oder der IP-Adresse des Computers ersetzen. Sie werden aufgefordert, Ihr SSH-Passwort einzugeben. Wenn alles erfolgreich abgeschlossen wurde, können Sie über auf das Gerät zugreifen, ssh user@server
ohne ein Passwort zu benötigen.ssh-keygen
, den Anweisungen auf dem Bildschirm zu folgen und dann ssh-copy-id user@server
Benutzer durch Ihren Remotebenutzer und Server durch den Remotecomputer zu ersetzen
ssh-copy-id "not-marco@127.0.0.1 -p 1234"
.
So mache ich das normalerweise:
ssh-keygen -t rsa
(Wenn Sie zur Eingabe eines Kennworts aufgefordert werden, lassen Sie es leer.)
Dann:
cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'
(Dazu muss sich der Ordner .ssh im Ausgangsverzeichnis auf dem Zielhostnamen befinden, in dem sich die Datei authorized_keys befindet.)
Ersetzen Sie natürlich den Benutzernamen durch den gewünschten Benutzernamen und den Hostnamen durch den gewünschten Hostnamen oder die gewünschte IP-Adresse
Danach nur noch SSH zu dieser Box, so wie du es gewohnt bist.
touch
und chmod
in Rinzwinds Antwort?
.ssh/authorized_keys
Datei auf 0600 chmod oder dies wird nicht funktionieren
Ich benutze normalerweise sshpass
dafür, installiere es mit sudo apt-get install sshpass
und benutze es so
sshpass -p 'password' ssh your_username@your_server
sshpass
ein sehr nützlicher Hack, wenn Sie die Authentifizierungsmethode auf dem Remote-Server nicht ändern können!
Deaktivieren Sie die Kennwortauthentifizierung
Da viele Leute mit SSH-Servern schwache Passwörter verwenden, werden viele Online-Angreifer nach einem SSH-Server suchen und dann nach dem Zufallsprinzip Passwörter erraten. Ein Angreifer kann innerhalb einer Stunde Tausende von Passwörtern ausprobieren und selbst das sicherste Passwort erraten, wenn genügend Zeit zur Verfügung steht. Die empfohlene Lösung ist die Verwendung von SSH-Schlüsseln anstelle von Kennwörtern. Um so schwer zu erraten wie ein normaler SSH-Schlüssel zu sein, müsste ein Passwort 634 zufällige Buchstaben und Zahlen enthalten. Wenn Sie sich immer mit einem SSH-Schlüssel bei Ihrem Computer anmelden können, sollten Sie die Kennwortauthentifizierung vollständig deaktivieren.
Wenn Sie die Kennwortauthentifizierung deaktivieren, können Sie nur Verbindungen von Computern herstellen, die Sie speziell genehmigt haben. Dies verbessert Ihre Sicherheit erheblich, macht es Ihnen jedoch unmöglich, von einem PC eines Freundes aus eine Verbindung zu Ihrem eigenen Computer herzustellen, ohne den PC vorher zu genehmigen, oder von Ihrem eigenen Laptop, wenn Sie versehentlich Ihren Schlüssel löschen.
Es wird empfohlen, die Kennwortauthentifizierung zu deaktivieren, es sei denn, Sie haben einen bestimmten Grund, dies nicht zu tun.
Suchen Sie in der Datei sshd_config nach der folgenden Zeile, um die Kennwortauthentifizierung zu deaktivieren:
#PasswordAuthentication yes
Ersetzen Sie es durch eine Zeile, die so aussieht:
PasswordAuthentication no
Nachdem Sie die Datei gespeichert und Ihren SSH-Server neu gestartet haben, sollten Sie beim Anmelden nicht einmal nach einem Kennwort gefragt werden.
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
PasswordAuthentication no
alle Benutzer? Wenn nicht, wie schalte ich es für normale Benutzer aus, aber lasse es für root unverändert, während ich es teste? Ich möchte es nicht wirklich fesseln und mich komplett aussperren.
Permission denied (publickey).
mit PasswordAuthentication no
. Was soll ich tun Ändere ich PasswordAuthentication no
auf einem anderen Host?
Diese Lösung ist speziell für Anwender mit Windows - ssh in ihre Remote - Maschinen einschließlich Cloud Bilder auf AWS - Cloud und GCE Wolke
Kürzlich wurde diese Lösung zum Remote-Anmelden neuer bereitgestellter VM-Images auf GCE verwendet.
puttygen
puttygen herunterladenwinscp
Winscp herunterladenWenn Sie einen privaten Schlüssel besitzen:
Öffnen Sie puttygen
, drücken Sie die Ladetaste und wählen Sie Ihre private Schlüsseldatei ( *.pem
) aus.
Wenn Sie keinen privaten Schlüssel besitzen:
puttygen
,(von Quelle 1, unten angegebener Link)
notepad
)Kopieren Sie Ihre öffentlichen Schlüsseldaten aus dem Abschnitt "Öffentlicher Schlüssel zum Einfügen in die OpenSSH-Datei authorized_keys" des PuTTY-Schlüsselgenerators und fügen Sie die Schlüsseldaten in die authorized_keys
Datei ein.
Stellen Sie sicher, dass diese Datei nur eine Textzeile enthält.
Laden Sie die Datei "authorized_keys" in das Ausgangsverzeichnis auf dem Remote-Computer hoch.
.ssh
Verzeichnis erstellen (falls nicht vorhanden)
authorized_keys
Datei in .ssh
Verzeichnis kopieren .
(Dies ersetzt alle vorhandenen authorized_keys
Dateien, beachten Sie dies).
Wenn eine Datei vorhanden war, fügen Sie einfach den Inhalt dieser Datei zur vorhandenen Datei hinzu.
Führen Sie Befehle aus, um Berechtigungen festzulegen:
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
Jetzt können Sie ssh
jedes Mal auf einen Remote-Computer zugreifen, ohne Anmeldeinformationen eingeben zu müssen.
Wenn Sie ein öffentliches Schlüsselpaar erstellen und sich mit unserem neu erstellten öffentlichen Schlüssel anmelden, müssen Sie Ihr Kennwort nicht eingeben. Abhängig von der Konfiguration Ihres Schlüsselbunds und / oder SSH-Agenten müssen Sie Ihren Schlüssel möglicherweise mit einer Passphrase schützen.
Hier ist eine von vielen kurzen Anleitungen für Sie. Für die Sicherheit dieser Methode ist es von entscheidender Bedeutung, dass der generierte private Schlüssel privat bleibt! Sie sollten es niemals an Dritte weitergeben oder den Zugriff darauf in irgendeiner Form gestatten.
Dieser Befehl generiert einen relativ starken Schlüssel für ~/.ssh/
:
ssh-keygen -b 4096
In ~/.ssh/
finden Sie Ihren öffentlichen Schlüssel als id_rsa.pub
. Der Inhalt sollte an Ihre authorized_keys
Serverdatei angehängt werden, indem Sie die Datei über ein transportierbares Medium (USB-Stick) transportieren oder die Kennwortauthentifizierung auf dem Server kurz aktivieren, dann verwenden ssh-copy-id ~/.ssh/id_rsa.pub username@server
und wieder deaktivieren.
Wenn Sie sich dafür entschieden haben, Ihren Schlüssel mit einer Passphrase zu sichern (im ersten Schritt), können Sie ssh-agent
oder den Ubuntu-Schlüsselring verwenden, um diese Pharse lokal zu sichern, damit Sie sie nicht die ganze Zeit eingeben müssen.
Einige Ergänzungen vornehmen:
Mac standardmäßig nicht, müssen ssh-copy-id
Sie es selbst installieren:
curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
chmod +x /usr/local/bin/ssh-copy-id
Weitere Informationen finden Sie hier: https://github.com/beautifulcode/ssh-copy-id-for-OSX
Wenn Sie eine Portweiterleitung durchgeführt haben, sollte der Befehl folgendermaßen lauten:
ssh-copy-id "not-marco@127.0.0.1 -p 2222"
Beachten Sie, dass die Anführungszeichen erforderlich sind.
Die Anwendungen ssh
und scp
für Remote - Login und Remote - Copy bzw. können Sie mit einer Remote - Host kommunizieren , ohne ein Passwort zu geben. Dies setzt voraus, dass Sie einem Authentifizierungsverfahren wie dem unten beschriebenen folgen. Unter Client verstehen wir die Maschine, auf der Sie sitzen, und unter Server die Maschine, auf der Sie sich anmelden möchten, ohne ein Kennwort anzugeben. Die Schritte des Authentifizierungsverfahrens sind:
$HOME/.ssh
.$HOME/.ssh/authorized_keys
oder $HOME/.ssh/authorized_keys2
an den Server an.Es gibt drei verschiedene Arten von Authentifizierungsprotokollen. Sie geben den Typ an, wenn Sie ssh-keygen ausführen:
chmod 0700
sicherstellen, dass diese Datei für andere nicht lesbar ist) und zur Datei identity.pub (öffentlicher Schlüssel).ssh-keygen -t rsa
Dateien id_rsa
(privater Schlüssel) und id_rsa.pub
(öffentlicher Schlüssel) erzielt.ssh-keygen -t dsa
und führt zu Dateien id_dsa
(privater Schlüssel) und id_dsa.pub
(öffentlicher Schlüssel)Wenn Sie ssh-keygen ausführen, können Sie sich auf Standardantworten verlassen (was bedeutet, dass Sie keine Passphrase angeben). Dies macht die gesamte Einrichtung einfach, aber auch unsicher.
Sie können den Schlüsseltyp angeben, der von einer Option für ssh verwendet werden soll . ssh -1
Kräfte Verwendung von RSA1 Tasten (Protokoll Version 1), während ssh -2
Kräfte ssh versuchen RSA oder DSA Schlüssel nur (Protokoll Version 2). In den folgenden Beispielen generieren und installieren wir RSA1- und DSA- Schlüssel auf dem Remote-Host, damit Sie flexibler sind. .ssh
Mit der Zeile können Sie eine Konfigurationsdatei in Ihrem Verzeichnis erstellen
Protocol 1,2
Dies veranlasst ssh , eine RSA1-Verbindung (Protokollversion 1) vor RSA / DSA (Protokollversion 2) zu versuchen .
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"
Dies ist alles, was Sie tun müssen, wenn Sie beim Generieren der Schlüssel keine Passphrase verwendet haben. Sie können die Verbindung testen, indem Sie ssh $ remote ausführen und prüfen, ob Sie sich ohne Angabe eines Kennworts anmelden können (möglicherweise müssen Sie -1
oder -2
als Optionen für ssh verwenden ). Der Vorgang kann natürlich für jeden Computer wiederholt werden, auf dem Sie sich anmelden möchten.
Wenn Sie eine Passphrase verwendet haben, müssen Sie das Programm ausführen ssh-agent
, um eine spezielle Shell zu starten. Anschließend müssen Sie ssh-add
Ihre Kombination aus Schlüssel und Passphrase bei registrieren sshd
. Weitere Informationen finden Sie auf den Manpages dieser Programme.
ssh-no-password.sh
#!/bin/sh
# create ssh connections without giving a password
if [ $# -lt 1 ]; then
echo Usage: $0 username@remotehost
exit
fi
remote="$1" # 1st command-line argument is the user@remotehost address
this=$HOST # name of client host
# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
echo "just type RETURN for each question:" # no passphrase - unsecure!!
# generate RSA1, RSA and DSA keys:
echo; echo; echo
ssh-keygen
echo; echo; echo
ssh-keygen -t rsa
echo; echo; echo
ssh-keygen -t dsa
else
# we have $HOME/.ssh, but check that we have all types of
# keys (RSA1, RSA, DSA):
if [ ! -f $HOME/.ssh/identity ]; then
# generate RSA1 keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate RSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t rsa
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate DSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t dsa
fi
fi
cd $HOME/.ssh
if [ ! -f config ]; then
# make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
echo "Protocol 1,2" > config
fi
# copy public keys (all three types) to the destination host:
echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:
echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"
echo; echo; echo
echo "try an ssh $remote"
kopiert von: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html
Ich möchte eine Antwort für diejenigen hinzufügen, die möglicherweise feststellen, dass sie das Passwort eingeben sollten, obwohl sie alle Antworten hier gelesen haben, weil Sie IdentitiesOnly als Ja festgelegt haben. Und die Antwort hier kann Ihnen viel Zeit sparen, um mehrere Schlüssel zu verwalten - Schlüssel für Git oder Server.
Nachdem ich den Schlüssel generiert und auf den Server kopiert habe:
ssh-keygen # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160
Ich fand es hat nicht funktioniert.
Dann ging ich zum ~/.ssh/config
Client, um die Datei zu überprüfen. Ich sah das unten:
Host *
IdentitiesOnly yes
Dann füge ich das oben hinzu:
Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something
Ich kann mich nur durch Eingabe einloggen ssh somename
.
Dann können Sie mehrere SSH-Schlüssel mit Ihren Lieblingsnamen hinzufügen, und Sie müssen nur die Einstellungen wie die obigen vier Zeilen zur Konfigurationsdatei hinzufügen.
Host ist der Name, den Sie eingeben möchten, wenn Sie den Server später verbinden. Der Hostname ist die IP des Servers. Benutzer ist der Benutzername, den Sie beim Server anmelden. und die Identitätsdatei ist die Datei, in der Sie den von Ihnen generierten Schlüssel speichern.