Supportnet / Forum / Linux
SCP-upload per Script
Frage
Hi!
Folgende Problemstellung:
Ich muss sensible Daten(wirklich sensibel, also keine Vorschlag à la "nimm doch einfach FTP") auf einen Remoteserver hochladen. Ich hab mir gedacht dafür scp zu nehmen. Der Upload sollt über eine Weboberfläche(PHP) gestartet werden.
Also
[code]
exec( "scp -i my-priv-key test.txt myuser@mydomaine.de:/home/myhome" );
[/code]
Aber wie gehts jetzt weiter? Denn scp is ja interaktiv und will jetzt eine Passphraseeingabe. Per proc_open() gehts leider nicht weil mein PHPzu alt ist.
Wär super wenn jemand ne Lösung wüsste.
Michael
Antwort 1 von labbe
hab mich zufällig gerade mit scp ein bisschen beschäftigt, hab alleridings nich wirklich ne ahnung von dem ding.
habe aber einige nette gui's dafür gefunden, viellecht helfen die dir weiter, such mal bei sourceforge.net nach "scp gui".
habe aber einige nette gui's dafür gefunden, viellecht helfen die dir weiter, such mal bei sourceforge.net nach "scp gui".
Antwort 2 von Chonhulio
Du kannst dazu die Private/Public-Key Authentifizierung verwenden.
1. Schlüssel auf dem Rechner erzeugen, der den scp-Befehl ausführen soll:
ssh-keygen -b 1024 -t rsa -f ~/.ssh/id_XYZ
Kein Passwort verwenden (zweimal Enter)!
2. Die Datei ~/.ssh/id_XYZ.pub auf den Server kopieren, und dort an die Datei ~/.ssh/autorized_keys anfügen:
cat id_XYZ.pub >> ~/.ssh/autorized_keys
Falls das Verzeichnis .ssh nicht existiert einfach herstellen.
3. Jetzt solltest du dich mit
ssh/scp -i id_XYZ remote
passwortfrei anmelden können.
XYZ durch etwas kurzes, aber beschreibendes ersetzen.
Jeder, der Zugriff auf den Schlüssel (~/.ssh/id_XYZ) hat kann sich damit ohne weitere Überprüfung anmelden, d.h. du solltest das Verfahren nur anwenden, wenn du den Schlüssel auf einem Vertrauenswürdigen Rechner abglegen kannst. Ist das nich der Fall, mußt du den Schlüssel seinerseits mit einem Passwort sichern.
1. Schlüssel auf dem Rechner erzeugen, der den scp-Befehl ausführen soll:
ssh-keygen -b 1024 -t rsa -f ~/.ssh/id_XYZ
Kein Passwort verwenden (zweimal Enter)!
2. Die Datei ~/.ssh/id_XYZ.pub auf den Server kopieren, und dort an die Datei ~/.ssh/autorized_keys anfügen:
cat id_XYZ.pub >> ~/.ssh/autorized_keys
Falls das Verzeichnis .ssh nicht existiert einfach herstellen.
3. Jetzt solltest du dich mit
ssh/scp -i id_XYZ remote
passwortfrei anmelden können.
XYZ durch etwas kurzes, aber beschreibendes ersetzen.
Jeder, der Zugriff auf den Schlüssel (~/.ssh/id_XYZ) hat kann sich damit ohne weitere Überprüfung anmelden, d.h. du solltest das Verfahren nur anwenden, wenn du den Schlüssel auf einem Vertrauenswürdigen Rechner abglegen kannst. Ist das nich der Fall, mußt du den Schlüssel seinerseits mit einem Passwort sichern.
Antwort 3 von Chonhulio
PS:
Natürlich muss scp auf die Datei id_XYZ zugreifen können. Ich kenne PHP nicht, nehme aber an, dass es einen eigenen, eingeschränkten Benutzeraccount verwendet. Dieser Account muß also den Schlüssel lesen dürfen, was ein großes Risiko darstellt, falls dein Webserver öffentlich zugänglich ist.
Übrigens muss RSA-Authentifizierung auf dem Server erlaubt sein (ist Standardeinstelllung).
mfg
Natürlich muss scp auf die Datei id_XYZ zugreifen können. Ich kenne PHP nicht, nehme aber an, dass es einen eigenen, eingeschränkten Benutzeraccount verwendet. Dieser Account muß also den Schlüssel lesen dürfen, was ein großes Risiko darstellt, falls dein Webserver öffentlich zugänglich ist.
Übrigens muss RSA-Authentifizierung auf dem Server erlaubt sein (ist Standardeinstelllung).
mfg
Antwort 4 von marty
@ Chonhulio
Das Ganze funktioniert auch MIT Passwort (muss auch nicht extra beim Verbindungsaufbau angegeben werden).
Ich hab mal meine Notizen reinkopiert:
Wenn man eine ssh-verbindung öfter nutzen will, kann man sich den Zugang etwas leichter machen um das Passwort nicht immer mit angeben zu müssen.
Dafür auf dem lokalen Rechner in das Verzeichnis "/home/benutzer/.ssh" wechseln. Jetzt ein Schlüsselpaar als dieser Benutzer (NICHT ALS ROOT) erstellen mit Eingabe von
Es werden 2 Schlüssel in dieses aktive Verzeichnis generiert : "id_rsa" und "id_rsa.pub"
Jetzt muss der Public-Schlüssel auf den Zielrechner kopiert werden mit :
Auf dem Zielrechner wird in "/home/benutzer/.ssh" die Datei "authorized_keys" erstellt, bzw. falls vorhanden , erweitert.
Eine Verbindung zu dem Zielrechner wird nun mit den befehl
aufgebaut.
Alles nicht so einfach ...
Das Ganze funktioniert auch MIT Passwort (muss auch nicht extra beim Verbindungsaufbau angegeben werden).
Ich hab mal meine Notizen reinkopiert:
Wenn man eine ssh-verbindung öfter nutzen will, kann man sich den Zugang etwas leichter machen um das Passwort nicht immer mit angeben zu müssen.
Dafür auf dem lokalen Rechner in das Verzeichnis "/home/benutzer/.ssh" wechseln. Jetzt ein Schlüsselpaar als dieser Benutzer (NICHT ALS ROOT) erstellen mit Eingabe von
ssh-keygen -t rsaEs werden 2 Schlüssel in dieses aktive Verzeichnis generiert : "id_rsa" und "id_rsa.pub"
Jetzt muss der Public-Schlüssel auf den Zielrechner kopiert werden mit :
ssh-copy-id /home/benutzer/.ssh/id_rsa.pub benutzer@beispiel.dyndns.orgAuf dem Zielrechner wird in "/home/benutzer/.ssh" die Datei "authorized_keys" erstellt, bzw. falls vorhanden , erweitert.
Eine Verbindung zu dem Zielrechner wird nun mit den befehl
ssh benutzer@beispiel.dyndns.orgaufgebaut.
Alles nicht so einfach ...
Antwort 5 von BFGM
@Chonhulio
gute Antwort, perfekt wäre sie ohne Tippfehler ;)
Funktioniert deutlich besser wenn die Datei ~/.ssh/authorized_keys heisst statt ~/.ssh/autorized_keys
So long greetz
gute Antwort, perfekt wäre sie ohne Tippfehler ;)
Funktioniert deutlich besser wenn die Datei ~/.ssh/authorized_keys heisst statt ~/.ssh/autorized_keys
So long greetz

