Wie kann ich mit einem privaten Schlüssel auf einen Remote-Server sshen?

77

Ich habe zwei Server. Beide Server sind in CentOS 5.6. Ich möchte mit meinem privaten Schlüssel (OpenSSH SSH-2 Private Key) von Server 1 auf Server 2 SSH durchführen.

Ich weiß nicht, wie ich das mit Unix machen soll. Unter Windows mit Putty habe ich meinen privaten OpenSSH-Schlüssel an putty-gen übergeben und einen privaten Schlüssel im PPK-Format generiert.

Ich würde jedoch ein Bash-Skript von Server 1 erstellen, das einige Befehle auf Server 2 über SSH ausführt.

Wie kann ich mit meiner privaten Schlüsseldatei von Server 1 eine SSH-Verbindung zu Server 2 herstellen?

Aivan Monceller
quelle
1
Auf vielen Linux- und Unix-Systemen kann dies mitssh-copy-id user@machine
Paul Tomblin

Antworten:

66

Sie benötigen Ihren öffentlichen SSH-Schlüssel und Ihren privaten SSH-Schlüssel. Schlüssel können mit erzeugt werden ssh_keygen. Der private Schlüssel muss auf Server 1 und der öffentliche Schlüssel auf Server 2 gespeichert sein.

Dies wird vollständig in der Manpage von openssh beschrieben, daher werde ich viel davon zitieren. Sie sollten den Abschnitt 'Authentifizierung' lesen. Auch das openSSH-Handbuch sollte wirklich hilfreich sein: http://www.openssh.org/manual.html

Bitte seien Sie vorsichtig mit ssh, da dies die Sicherheit Ihres Servers beeinträchtigt.

Von man ssh:

 ~/.ssh/identity
 ~/.ssh/id_dsa
 ~/.ssh/id_rsa
     Contains the private key for authentication.  These files contain
     sensitive data and should be readable by the user but not acces-
     sible by others (read/write/execute).  ssh will simply ignore a
     private key file if it is accessible by others.  It is possible
     to specify a passphrase when generating the key which will be
     used to encrypt the sensitive part of this file using 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_rsa.pub
     Contains the public key for authentication.  These files are not
     sensitive and can (but need not) be readable by anyone.

Dies bedeutet, dass Sie Ihren privaten Schlüssel in Ihrem Home-Verzeichnis in .ssh speichern können. Eine andere Möglichkeit besteht darin, ssh über den -iParameterschalter anzuweisen, eine spezielle Identitätsdatei zu verwenden. Auch von man ssh:

 -i identity_file
     Selects a file from which the identity (private key) for RSA or
     DSA authentication is read.  The default is ~/.ssh/identity for
     protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for pro-
     tocol version 2.  Identity files may also be specified on a per-
     host basis in the configuration file.  It is possible to have
     multiple -i options (and multiple identities specified in config-
     uration files).

Dies ist für den privaten Schlüssel. Jetzt müssen Sie Ihren öffentlichen Schlüssel auf Server 2 einführen. Wieder ein Zitat von man ssh:

  ~/.ssh/authorized_keys
         Lists the public keys (RSA/DSA) that can be used for logging in
         as this user.  The format of this file is described in the
         sshd(8) manual page.  This file is not highly sensitive, but the
         recommended permissions are read/write for the user, and not
         accessible by others.

Am einfachsten erreichen Sie dies, indem Sie die Datei auf Server 2 kopieren und an die Datei authorized_keys anhängen:

scp -p your_pub_key.pub user@host:
ssh user@host
host$ cat id_dsa.pub >> ~/.ssh/authorized_keys

Die Autorisierung über den öffentlichen Schlüssel muss für den ssh-Daemon erlaubt sein, siehe man ssh_config. Normalerweise kann dies durch Hinzufügen der folgenden Anweisung zur Konfigurationsdatei erreicht werden:

PubkeyAuthentication yes
Echox
quelle
10
Hallo, danke für die Mühe, aber ich brauche nur diese. ssh -i keyfileVielen Dank!
Aivan Monceller
8
Nach dem Schlüssel zu erzeugen, ist die einfachste und empfohlene Weg , es auf dem Server zu installieren , ist mit ssh-copy-id: ssh-copy-id -i ~/.ssh/foo.id_rsa remote.example.com.
Gilles
5
Es ist interessant, wie jeder vergisst zu erwähnen, dass Sie ausgeführt werden müssen, ssh-addnachdem Sie einen Schlüssel auf dem Computer erstellt haben, von dem aus Sie eine Verbindung herstellen. Das ist es, was den meisten Menschen Kopfschmerzen bereitet.
Luka
3
WICHTIGER HINWEIS: Der Client kann viele private Schlüssel haben und basierend auf einem beliebigen Namen in seiner privaten ~ / .ssh / config-Datei auswählen, wobei Host = den beliebigen Namen angibt, HostName entweder einen Namen oder eine IP-Adresse angibt, Port = den Zielport, Benutzer ist der Zielbenutzername und ItentityFile = zeigt auf die private Schlüsseldatei. Dieser Funktionsumfang wird häufig übersehen und ist DIE Lösung für viele Konfigurationsprobleme, z. B. wenn mehrere Schlüsselpaare im Namensraum kollidieren.
Richard T
1
Wenn ich versuche, mithilfe von SSH eine Verbindung herzustellen $ ssh -i ~/.ssh/id_rsa [email protected], wird der Fehler [email protected]: Permission denied (publickey).angezeigt, dass der Schlüssel erstellt, lokal mithilfe von ssh-addhinzugefügt und als autorisierter Schlüssel auf dem Remoteserver hinzugefügt wurde.
Aaron Franke
21

Ich habe ssh mit der Option -i verwendet, um Ihren Schlüssel hier hinzuzufügen.

Wenn Sie arg1, arg2 mit .sh-Datei übergeben möchten, übergeben Sie es einfach nach der .sh-Datei und verwenden Sie ein Leerzeichen, um es zu trennen.

ssh -i home/avr/new.pem [email protected] "/var/www/beta/betatolive.sh mmin 30"

Avinash Raut
quelle
1
Vergessen Sie nicht, die richtigen Berechtigungen chmod 600 home/avr/new.pem
festzulegen
16

Als Erstes müssen Sie sicherstellen, dass Sie den Befehl keygen ausgeführt haben, um die Schlüssel zu generieren:

ssh-keygen -t rsa

Verwenden Sie dann diesen Befehl, um den Schlüssel an den Remote-Server zu senden, und ändern Sie ihn so, dass er Ihrem Servernamen entspricht.

cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'
Anubhav Singh
quelle
6
Rufen wir ssh-copy-id user@hostnamestattdessen an
andrej
7

Hängen Sie den öffentlichen Schlüssel ( id_[rd]sa.pub) für Ihren Quellcomputer (von dem aus Sie senden) an die ~/.ssh/authorized_keysDatei des Zielservers für den Benutzernamen an, in den Sie senden möchten. Wenn Sie den öffentlichen Schlüssel verloren haben, möchten Sie einen neuen mit erstellen ssh-keygen. Die Verwendung der Standardargumente sollte für die meisten Zwecke in Ordnung sein. Wenn Sie detailliertere Anweisungen benötigen, gibt es Tausende von Tutorials, die Sie googeln können.

Kevin
quelle
4

ssh-copy-id - Verwenden Sie lokal verfügbare Schlüssel, um Anmeldungen auf einem Remotecomputer zu autorisieren

Verwenden Sie ssh-copy-idauf Server 1, vorausgesetzt , Sie sind das Schlüsselpaar haben (erzeugt mit ssh-keygen):

ssh-copy-id -i ~/.ssh/id_rsa user@server2_hostname

Jetzt sollten Sie in der Lage sein, mit ssh unter Verwendung des privaten Schlüssels in Server 2 zu ssh zu gelangen

ssh -i ~/.ssh/id_rsa user@server2_hostname

Wenn Sie cat ~/.ssh/authorized_keysServer 2 aktivieren, wird der öffentliche Schlüssel an Sie angehängt.

Sida Zhou
quelle