[ssh-keygen] Zwei Server: Abgleich von Dateien per Cronjob

ClausVB

Registered User
Ich versuche SSI-Dateien von einem Entwicklungserver (DEV) auf einen Produktionsserver (LIVE) per Cronjob zu übertragen. Das funktioniert nicht, weil der DEV immer die Passphrase haben möchte.

Folgende Anleitung habe ich benutzt:
SSH ohne Passwort -- eine kurze Anleitung

Ich habe außerdem gelesen:
www.different-thinking.de - Netze, Protokolle, Sicherheit

Ich habe im Jahr 2005 unter SLES9 eine ähnliche Konfiguration gemacht, die seitdem unproblematisch läuft. Diese Konfiguration hat auch den Upgrade von SLES9 auf SLES10 überlebt.

Was ich damals anders gemacht habe als heute, weiß ich nicht mehr. Ich bin mir aber sicher, dass ich damals auch RSA verwendet habe, es kann aber sein, dass ich die Passphrase leer lies (keine Eingabe).

Das Passwort wird immer abgefragt, was für einen Cronjob sehr ungünstig ist:
Code:
DEV:~ # su - cms127_ssi
cms127_ssi@DEV:~> ssh -v cms127_ssi@10.20.101.188
OpenSSH_4.2p1, OpenSSL 0.9.8a 11 Oct 2005
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 10.20.101.188 [10.20.101.188] port 22.
debug1: Connection established.
debug1: identity file /home/cms127_ssi/.ssh/identity type -1
debug1: identity file /home/cms127_ssi/.ssh/id_rsa type 1
debug1: identity file /home/cms127_ssi/.ssh/id_dsa type -1
debug1: Remote protocol version 1.99, remote software version OpenSSH_4.1
debug1: match: OpenSSH_4.1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.2
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 '10.20.101.188' is known and matches the RSA host key.
debug1: Found key in /home/cms127_ssi/.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
debug1: Authentications that can continue: publickey,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Trying private key: /home/cms127_ssi/.ssh/identity
debug1: Offering public key: /home/cms127_ssi/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Enter passphrase for key '/home/cms127_ssi/.ssh/id_rsa':

Für den Cronjob ist es natürlich nicht gut, dass er ein Passwort haben will.

Ein Test-Cronjob mit
Code:
cms127_ssi@DEV:~> more test_cronjob.sh
cd ~
date > datum.txt
cd /home/cms127/res
scp -r ssi cms127_ssi@10.20.101.188:/home/cms127_ssi/ssi
liefert immer
Code:
cms127_ssi@DEV:~> ./test_cronjob.sh
Enter passphrase for key '/home/cms127_ssi/.ssh/id_rsa':
Password:
Password:
Password:
Permission denied (publickey,keyboard-interactive).
lost connection
wenn man das Passwort einfach nur mit Return bestätigt. Folglich muss ich die Abfrage nach dem Passwort/Passphrase loswerden.

Muss ich die Passphrase bei der Generierung leer lassen? Habe ich etwas falsch gemacht?

Danke und Gruß
Claus
 
1. Lösungsansatz:
Dem Das kleine SSH-Tutorial - Login ohne Passwort zufolge habe ich
Code:
ssh-add
und ich erhalte:
"Could not open a connection to your authentication agent."

Nach der Fehlermeldung habe ich gegoogelt:

Code:
cms127_ssi@DEV:~> exec ssh-agent $SHELL
cms127_ssi@DEV:~> ssh-add
Enter passphrase for /home/cms127_ssi/.ssh/id_rsa:
Identity added: /home/cms127_ssi/.ssh/id_rsa (/home/cms127_ssi/.ssh/id_rsa)
cms127_ssi@DEV:~>

Danach läuft "test_cronjob.sh" erfolgreich durch. Aber das in die ".profile" zu übernehmen hat nichts gebracht, denn es wird ja immer noch die Passphrase abgefragt. Der Cronjob läuft also auch mit ".profile" nicht.

Gruß
Claus
 
Wenn Du den Schlüssel mit der Option -N erzeugst
Code:
ssh-keygen -t dsa -f /secret/mykey -N ""
und dann folgendermaßen verwendest:
Code:
scp -i /secret/mykey -r ssi cms127_ssi@10.20.101.188:/home/cms127_ssi/ssi
sollte es ohne Passwort funktionieren (sofern Du /secret/mykey/pub zu den autorisierten Schlüsseln hinzugefügt hast).

Wenn Du ganz sicher gehen willst, kannst Du ja noch einschränken, welche Befehle (-> nur scp) mit diesem Schlüssel ausgeführt werden können.

Viele Grüße,
LinuxAdmin
 
Danke für Deine Hilfe.

Folgendes habe ich gemacht:

Code:
cms127_ssi@DEV:~> ssh-keygen -t dsa -f secret/mykey -N ""
Generating public/private dsa key pair.
Your identification has been saved in secret/mykey.
Your public key has been saved in secret/mykey.pub.
The key fingerprint is:
c9:d2:7f:7a:d4:68:88:de:8b:d9:1d:1f:0b:84:29:39 cms127_ssi@DEV

Folgenden Satz habe ich nicht so richtig verstanden:
sofern Du /secret/mykey/pub zu den autorisierten Schlüsseln hinzugefügt hast

Vielleicht meinst Du damit die "authorized_keys" des anderen Systems also habe ich:
Code:
cms127_ssi@DEV:~>ssh-copy-id -i secret/mykey.pub cms127_ssi@10.20.101.188
gemacht.

Funktionieren tut es jetzt. Tausend Dank!

Gruß
Claus
 
Back
Top