"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

SFTP - Datei kopieren ohne PW Eingabe

jb 16.02.2009 - 15:13 5209 6 Thread rating
Posts

jb

Here to stay
Registered: May 2000
Location: /home/noe/
Posts: 3514
Folgendes Problem: Muß von einem anderen Linux Rechner ein Textfile mittels SFTP (Secure FTP) abholen, das ganze soll aber per Cron-Job, also ohne Usereingabe laufen.
Manuell (mit interaktiver Paßworteingabe) ist das Ganze kein Problem, nur kann man SFTP kein Paßwort übergeben, was das Ganze recht schwierig macht.

Im Internet findet man einiges über Private Keys und Public Keys, ich weiß auch, daß beim ersten Login in der known_hosts Datei im .ssh Verzeichnis die IP des Servers + nochwas (Public Key des Servers?) reingeschrieben wird, doch das Ganze erscheint mir ein bißchen undurchsichtig und irgendwann muß man eine Datei auf den Server kopieren soweit ich das rauslesen konnte (was ich nicht kann => nur Leserechte).

Was muß ich genau tun, daß ich einen automatischen Login erhalte, also nicht jedes Mal das Paßwort eingeben muß?

nexus_VI

Overnumerousness!
Avatar
Registered: Aug 2006
Location: südstadt
Posts: 3746
Code:
scp ~/.ssh/id_rsa.pub host:/home/user/.ssh/
ssh host
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Zum Beispiel :)
Edit: Autsch, ausführlich gepwnd :(

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12067
Alles andere als Pubkey-Auth ist in diesem Fall imho grober Unfug. Du wirst den Admin deines Servers bitten muessen, eine Zeile zu einer Datei im Home-Directory des Users, als der du dich dort einlogst, hinzuzufuegen.

Um zu wissen, welchen Text diese Zeile beinhalten soll, gehst du wie folgt vor (diese Prozedur ist sicher tausendmal via Google zu finden, sollte dir diese Kurzanleitung nicht ausreichen. Alle Kommandos werden als dein normaler User auf dem Host ausgefuehrt, welcher der Client der SSH-Verbindung sein soll.):


Code:
ssh-keygen
cat ~/.ssh/id_*.pub
Wenn du nach der Passphrase fuer den Privkey gefragt wirst, drueckst du einfach [ENTER] - dann wird gar kein Passwort gesetzt.
Die Ausgabe des letzten Kommandos (Achtung, das ist EINE Zeile - aber als solche wahrscheinlich laenger, als dein Terminal(emulator) breit ist!) - das ist dein Pubkey - muss der Admin deines Servers an die Datei ~/.ssh/authorized_keys (im Kontext des Benutzers, als der du dich remote anmelden willst) anhaengen. Wenn es die Datei noch nicht gibt -> egal, einfach mit dem Pubkey als Inhalt erstellen.

Falls du doch Schreibzugriff auf das ~ des remote-User hast, kannst du den Export des Pubkeys auch automatisieren:
Code:
eval $(ssh-agent)
ssh-add
ssh-copy-id remoteuser@remotehost

Danach solltest du dich mit
Code:
ssh remoteuser@remotehost
passwortlos einloggen (und auch andere SSH-Services, wie etwa sftp oder scp, nutzen) koennen.

Hth!
Bearbeitet von COLOSSUS am 17.02.2009, 08:59 (Wichtiges Kommando vergessen)

jb

Here to stay
Registered: May 2000
Location: /home/noe/
Posts: 3514
Danke @Colossus, jetzt leuchtet das Ganze langsam ein.
Das entsprechende File auf meinem Linux Rechner hab ich jetzt mal erstellt, muß morgen mal mit dem Admin reden daß er den Public Key meines Linux Rechners raufkopiert, hab nämlich wirklich nur Leserechte soweit ich das sehen konnte.

Noch ne Frage:

Wann ändert sich der Public Key, bzw. wann wird er neu erstellt? Ist das immer beim Reboot der Fall oder sonst auch irgendwann mal?

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12067
Zitat von jb
Wann ändert sich der Public Key, bzw. wann wird er neu erstellt? Ist das immer beim Reboot der Fall oder sonst auch irgendwann mal?

Nie - auszer du erstellst einen neuen (mittels ssh-keygen oder z. B. puttygen).

Es waere nicht unklug, wuerdest du dir ein Backup deines Keypairs auf einem sicheren (=verschluesselten) Datentraeger erstellen. In der Firma haben wir zusaetzlich noch einen Ausdruck des Privkeys, versiegelt eingeschweiszt in einem "kopiersicheren" Umschlag im feuerfesten Tresor. Kann auch nicht schaden, wenn man geschaeftskritische Sachen mittels SSH erledigt.

Neo-=IuE=-

Here to stay
Registered: Jun 2002
Location: Berndorf, NÖ
Posts: 3232
Zitat von COLOSSUS
Falls du doch Schreibzugriff auf das ~ des remote-User hast, kannst du den Export des Pubkeys auch automatisieren:
Code:
eval $(ssh-agent)
ssh-copy-id remoteuser@remotehost

das eval die im output vorkommenden befehle ausführt hab ich schon nachgelesen, aber wozu genau brauche ich das in diesem script?

weiters:
was macht ssh-copy-id? macht es das anhängen von dem pubkey an "authorized keys"?
kann es sein, dass dieses nicht überall dabei ist? zumindest hab ichs hier bei zwei systemen mit CentOS release 4.7 (Final) nicht

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12067
Zitat von Neo-=IuE=-
das eval die im output vorkommenden befehle ausführt hab ich schon nachgelesen, aber wozu genau brauche ich das in diesem script?
Ein laufender ssh-agent mit geladener Identitaet (Achtung, ich habe urspruenglich auf `ssh-add` als Zwischenschritt vergessen!) wird von anderen Programmen, die diese Identitaet nutzen wollen, ueber einige Umgebungsvariablen "gefunden" und angesprochen. Diese Variablen, samt mit fuer diese Instanz des Agents passender belegung, schreibt ein neu startender Agent als KEY=VALUE-Paare auf stdout. Um die Variablen dann nicht manuell in der den agent startenden Shell setzen zu muessen, wrapt man einfach eval $() herum, was diese Statements im Kontext der laufenden Shell ausfuehrt, und die Variablen entsprechend setzt.
Es ist natuerlich auch moeglich, einen agent gleich beim Starten der X-Session starten, und die entsprechenden Variablen fuer alle Kindprozesse zu setzen. Manche Desktopumgebungen (KDE etwa) ermoeglichen das recht komfortablen (einfach mal googlen :)).

Zitat von Neo-=IuE=-
weiters:
was macht ssh-copy-id? macht es das anhängen von dem pubkey an "authorized keys"?
kann es sein, dass dieses nicht überall dabei ist? zumindest hab ichs hier bei zwei systemen mit CentOS release 4.7 (Final) nicht
Das ist ein Shellscript, das in der vanilla OpenSSH-Distribution mit dabei ist. Vielleicht war das zum bei CentOS 4.7 aktuellen Release noch nicht der Fall, oder Red Hat patcht es raus/installiert es nicht (oder nicht irgendwo in $PATH). Es macht genau das, was du vermutet hast. Ich hab es mal fuer dich hochgeladen, fuer den Fall, dass du es dir ansehen moechtest.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz