Dateien kopieren mit SCP
Aus A-Enterprise
Dateien über SSH kopieren ohne Passworteingabe
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


