Dateien kopieren mit SCP

Aus A-Enterprise

Wechseln zu: Navigation, Suche

Dateien über SSH kopieren ohne Passworteingabe

Autor: Don.K am 19. Feb 2008

SCP - secure copy (remote file copy program)



Shell Skripte, die man beispielsweise regelmässig mittels Cronjob ausführt, um Dateien von einem Rechner auf einen anderen zu kopieren, kann es dabei hinderlich sein, bei der Ausführung von SCP jedes Mal manuell das Passwort eingeben zu müssen.

Um dies zu vermeiden, beschreibt der folgende Artikel die Möglichkeit, mittels SCP Dateien zu kopieren, ohne das dabei ein Passwort eingegeben werden muss. Der Artikel Beschreibt den Aufbau basierend auf CentOS 4 kann jedoch mit allen gängigen GNU/Linux Distributionen angewandt werden. (Unter CentOS funktioniert es NUR mit DSA und RSA Schlüsselpaare!).


Dies ist möglich, indem man Schlüssel für verschlüsselte Datenübertragung generiert und installiert, die an die IP-Adressen der beiden beteiligten Rechner gebunden sind. Die Rechner verwenden dann diese installierten Schlüssel, um sich bei der Dateiübertragung gegenseitig zu identifizieren.


Hinweis: Aufgrund der Schlüsselerzeugung auf Basis der IP-Adressen der Rechner ist dieses Verfahren für Rechner mit wechselnden IP-Adressen z.B. Server, die per DSL mit regelmässig wechselnden IP-Adressen ans Internet angebunden sind nicht geeignet!

Neben den beschriebenen Einschränkungen sind auch einige Sicherheitsaspekte zu berücksichtigen. Die Installation der Schlüssel sorgt nämlich dafür, dass nicht nur bei SCP, sondern auch bei SSH keine Passworteingabe mehr nötig ist, wenn der Login von einem Rechner erfolgt, dessen Schlüssel hinterlegt ist. Somit würde lediglich die Eingabe des Benutzernamens den Zugriff per SSH ermöglichen. Aus diesem Grund ist es ratsam, auf beiden beteiligten Rechnern unprivilegierte Benutzeraccounts (also nicht Root!) für das beschriebene Vorgehen zu verwenden.


In den kommenden Beispielen verwenden wir deshalb den Benutzer "homer", um Dateien ohne Passworteingabe vom Rechner "lisa" auf den Rechner "selma" zu kopieren.


Inhaltsverzeichnis

Konfiguration des Quellrechners:

Die folgenden Schritte sind notwendig, um den Rechner zu konfigurieren, von dem wir die Dateien senden wollen (lisa).


Zunächst müssen wir die Schlüssel für den Benutzeraccount "homer" generieren. Dabei jeweils NUR Enter drücken, wenn während der Schlüsselerzeugung eine Passworteingabe gefordert ist (kein Passwort eingeben!).

[homer@lisa ~]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/homer/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/homer/.ssh/id_dsa.
Your public key has been saved in /home/homer/.ssh/id_dsa.pub.
The key fingerprint is:
1c:63:36:9f:57:95:66:e3:37:2b:b5:c2:62:3c:26:f1 homer@lisa.simpson.foo

[homer@lisa ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/homer/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/homer/.ssh/id_rsa. Your public key has been saved in /home/homer/.ssh/id_rsa.pub. The key fingerprint is: 23:c4:2b:b3:ac:79:0e:9b:b9:d1:1f:9a:60:1f:0f:be homer@lisa.simpson.foo


Die erzeugten RSA und DSA Schlüsselpaare werden im Unterverzeichnis .ssh im Home-Verzeichnis von Benutzer homer abgelegt. Die Dateien "id_dsa" und "id_rsa" sind die privaten Schlüssel. Die Dateien "id_dsa.pub" und "id_rsa.pub" enthalten den öffentlichen Schlüssel, den wir auf dem Zielserver (selma) hinterlegen werden.

Konfiguration des Ziel-Rechners

Die folgenden Schritte sind notwendig, um den Rechner zu konfigurieren, der die Dateien empfangen soll (selma).


Zunächst müssen wir auf dem Server Selma die SSH Konfiguration überprüfen und ggf. Anpassen. Folgende Parameter sollten eingestellt werden. (Diese werte sind NICHT Default!).

[homer@selma ~]# vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys
PermitEmptyPasswords yes
PasswordAuthentication yes
ChallengeResponseAuthentication yes

Optional
GSSAPIAuthentication no
GSSAPICleanupCredentials yes

Tipps zur Sicherheit!   Um die Sicherheit zu erhöhen sollte man folgende Einstellungen in "sshd_config" vornehmen.

Protocol 2
PermitRootLogin no
AllowUsers homer marge

Jetzt erstellen wir auf Selma unser Benutzeraccount "homer" mit diesem wir uns einloggen, dort im Homeverzeichnis ein Unterverzeichnis ".ssh" anlegen und in dieses Verzeichnis wechseln.

[homer@selma ~]# mkdir .ssh
[homer@selma ~]# chmod 700 .ssh
[homer@selma ~]# cd .ssh

Kopieren wir nun NUR DIE ÖFFENTLICHEN SCHLÜSSEL von Server Lisa in das Home-Verzeichnis von Homer, "home/homer/.ssh" auf Server Selma, wohin wir später über SCP Dateien ohne Passworteingabe kopieren wollen.

[homer@selma .ssh]# vi authorized_keys

Die Schlüssel mittels Copy & Paste an das Ende der Datei "authorized_keys" hinzufügen (anhängen), (alles auf einer Zeile, ohne Umbrüche!). Diese Datei enthält eine Liste sämtlicher öffentlicher Schlüssel von Rechnern, die sich ohne Passwort mit unserem Account Homer auf Selma anmelden dürfen.

SCP in der Anwendung

Jetzt können wir als Benutzer "homer" über SSH und per SCP Dateien von Lisa auf Selma kopieren, ohne dass wir dazu ein Passwort eingeben müssen.

[homer@lisa ~]# scp -v donut homer@192.168.1.2:/home/homer/donut

Der Befehl erzeugt folgende Ausgabe (-v debug modus):

Executing: program /usr/bin/ssh host 192.168.1.2, user homer, command scp -v -t /home/homer/donut
OpenSSH_4.3p2, OpenSSL 0.9.8c 05 Sep 2006
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to selma.bouvier.foo [192.168.1.2] port 22.
debug1: Connection established.
debug1: identity file /home/homer/.ssh/identity type -1
debug1: identity file /home/homer/.ssh/id_rsa type 1
debug1: identity file /home/homer/.ssh/id_dsa type 2
debug1: Remote protocol version 2.0, remote software version OpenSSH_3.9p1
debug1: match: OpenSSH_3.9p1 pat OpenSSH_3.*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.3p2
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host '192.168.1.2' is known and matches the RSA host key.
debug1: Found key in /home/homer/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
CentOS release 4.2 (Final)
Kernel 2.6.9-22.0.1.EL i686
connect to selma.bouvier.foo
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Trying private key: /home/homer/.ssh/identity
debug1: Offering public key: /home/homer/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LC_ALL = de_DE
debug1: Sending env LANG = de_DE
debug1: Sending command: scp -v -t /home/homer/donut
Sending file modes: C0644 8 donut
Sink: C0644 8 donut
donut                                                100%    8     0.0KB/s   00:00
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
debug1: Transferred: stdin 0, stdout 0, stderr 0 bytes in 0.2 seconds
debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 0.0
debug1: Exit status 0

Weblinks

Persönliche Werkzeuge