# scp im Batchmode als cronjob



## GuenterS (14. Dezember 2004)

Hallo,

ich habe 2 Server (Server1 und Server2) beide laufen unter Linux (einer debian der andere Fedora).

Jeden Tag wird auf Server1 ein Backup gemacht (via cronjob) dieses möchte ich ebenfalls als cronjob (im selben script) auf Server2 kopieren. Dazu möchte ich scp verwenden. 

Laut Hilfe hat scp einen Parameter "-B", welcher scp im Batchmode ausführt, also nicht nach Passwort fragt. Gut irgendwoher muss das Passwort ja kommen.

Habe in einem Linux Buch eine Anleitung gesehen, mit welchem man sich passwortlos auf dem zielrechner einloggen kann. Dazu werden RSA Keys erstellt.

Laut Anleitung sollte ich folgendes ausführen:


Server1$: ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa): <ENTER>
Enter passphrase (empty for no passphrase): <ENTER>
Enter same passphrase again: <ENTER>
...
...

scp ./ssh/id_rsa.pub user@Server2:~/.ssh/id_rsa.pub
password:


server1$: ssh user@server2
user@server2's password:
$ cd ~/.ssh
$ cat id_rsa.pub >> authorized_keys
$ exit



Danach sollte ein Passwortloses einloggen via ssh user@server2 möglich sein.  (Mein User heißt natürlich nicht "user" ist aber ein gültiger username).

Mein Problem ist, dass diese Anleitung leider nicht wirklich funktioniert, ich werde nach wie vor nach dem Passwort gefragt. Was kann/muss ich tun um dieses Problem zu lösen?

Hat jemand Ideen? 

Btw. das Manual hab ich mir schon angeschaut und auch schon versucht mittels google hilfe zu finden.


----------



## JohannesR (14. Dezember 2004)

Das Zauberwort heisstauthorized_keys2 . Google mal danach, damit klappt das ganze. 

Du legst eine authorized_keys2 in ~/.ssh an, schreibst den Public-Key des Clients rein, schon kann dieser sich, sofern er den Key per bspw. Keychain publik gemacht hat, passwortlos einloggen.

Gruesse


----------



## GuenterS (14. Dezember 2004)

Das hat mich leider auch nicht weiter gebracht bis auf eine weitere leider nicht funktionierende Anleitung.

Was ich aber nicht gemacht habe, den Key mittels Keychain public zu machen. (Habe das erst jetzt in Deiner Antwort gelesen).

Wie mach ich das mit Keychain bzw. ohne Keychain?


```
0. generate new key pair.
        1. tell ssh-keygen to save the pair to some arbitrary
           path, call it '~/.ssh/newkeypair
        2. when ssh-keygen is done, I'll have two new files:
                ~/.ssh/newkeypair
                        and
                ~/.ssh/newkeypair.pub
        3. then i run this:
                cat ~/.ssh/newkeypair.pub | ssh servername -l username cat >> .ssh/authorizied_keys
           of course, this command prompts me for username at servername's
           password.

        4. hereafter, if I type
                ssh servername -l username -i ~/.ssh/newkeypair
           I am not prompted for username at servername's password,
           just for the passphrase (if there was one when i gen'ed the
           key pair).
```

Es macht auch keinen Unterschied ob man "authorized_keys" schreibt oder "authorizied_keys". (weil beide varianten öfter auftauchen ich diese aber eher für Tippfehler halte)


----------



## Thorsten Ball (14. Dezember 2004)

Ich würde auf dem Server2 auch nicht unbedingt den öffentlichen Schlüssel 
als eigenen öffentlichen Schlüssel platzieren. Also auf beiden Rechnern id_rsa.pub. Mach doch einfach:


```
user@server1 $ scp .ssh/id_rsa.pub user@server2.com:~/
user@server1 $ ssh -l user server2.com
user@server2 $ cat id_rsa.pub >> .ssh/authorized_keys2
user@server2 $ rm id_rsa.pub
user@server2 $ exit
```

Und dann sollte der passwortlose Login funktionieren. Zumindest bei mir. Wieso eigentlich
keine DSA-Keys?

Thorsten


----------



## GuenterS (14. Dezember 2004)

Hm wenn Du mir sagst wie das mit den DSA Keys funktioniert, wäre ich auch über diese Lösung glücklich, da mein Problem vielmehr das ist, dass ich scp im Batchmode (also ohne Passwortabfrage (und natürlich auch keinen anderen)) ausführen möchte.


----------



## Thorsten Ball (14. Dezember 2004)

Also, ich würde DSA bevorzugen, weil es der standardmäßige Schlüssel des SSH2 Protokols ist. Generieren kann man einen mit folgendem Kommando:


```
ssh-keygen -d -b 1024 -C Das ist mein DSA-Schluessel
```
-d: DSA
-b: Bitlänge
-C: Kommentar, da kannst du hinschreiben was du willst, zB lokaler Benutzer und Servername
Und vor allem: Keine Passphrase angeben! Das würde dein Vorhaben witzlos machen. Aber
unten mehr dazu...

Dann das kopieren:

```
scp .ssh/id_dsa.pub server2:~/
```

Nun das einrichten auf dem entfernten Server:

```
ssh server2.com
cat id_dsa.pub >> .ssh/authorized_keys2
```

Nun probieren ob man über das SSH2-Protokol Zugriff auf die Remotemaschine hat:

```
ssh -2 server2
```

Wenn du eine Passphrase (was in deinem Fall nicht hilfreich wär angegeben hast, musst
du sie nun eingeben).

Aber um mal etwas auf die Sicherheit anzusprechen: Es wäre wohl besser wenn du dir Schlüssel mit Mantra anlegst und dann ssh-agent nutzt um einen passwortlosen Login zu ermöglichen. Ein bisschen googlen zu ssh-agent sollte helfen.

Thorsten


----------



## GuenterS (14. Dezember 2004)

Hm habe gerade das Ausprobiert was Du mir geschrieben hast, funktioniert leider nicht. Werde nach wie vor nach meinem Passwort gefragt.


----------



## ehoenig (21. Dezember 2004)

Hi,

vielleicht kann dir ein Blick in /var/log/secure (RH) helfen, weiters würde ich eine Änderung in der /etc/ssh/sshd_config ("StrictModes no") versuchen.

MFG
Ernst


----------

