Ganzes Verzeichnis mit "scp" oder "sftp" übertragen? [Gelöst]

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Ganzes Verzeichnis mit "scp" oder "sftp" übertragen? [Gelöst]

Beitrag von jmar83 » 06.03.2019 16:27:11

Hallo zusammen

Ich muss ein ganzes Verzeichnis von einer Linux-Maschine per SCP oder SFTP (bevorzugt!) auf einen Windows 10-Rechner laden, wo der "StarWinds SCP/SFTP"-Server auf Port 22 läuft.

Nun:

Folgender Befehl bleibt "hängen", die Konsole ist zwar nicht blockiert, gibt aber nix mehr raus (nur Zeilen mit Zeilenumbruch, demzufolge einfach schwarz) nach der Eingabe des korrekten Kennworts:

Code: Alles auswählen

scp -r 2019_03_06__13_22_44 testuser@192.168.1.21:/2019_03_06__13_22_44
...während dessen ist die Datei (warum kein Verzeichnis, eigentlich wollte ich ja ein Verzeichnis hochladen!?) auf dem Windows 10-SCP/SFTP-Server blockiert, hat 0 Bytes und kann nicht gelöscht werden. Sobald ich in der Linux-Client-SSH-Konsole "Ctrl-C" drücke, ist das File-Handle wohl weg und die 0-Bytes-Datei kann gelöscht werden.


Analog geht mit "sftp" gar nix, das Befehlsformat scheint dabei schlicht falsch zu sein, es kommen die Befehlsparameter-Hilfeinfos:

Code: Alles auswählen

sftp -r 2019_03_06__13_22_44 -oStrictHostKeyChecking=no testuser@192.168.1.21:/2019_03_06__13_22_44

...und bei "sftp" ist es der Fall, dass dieses Tool eine eigene Konsole hat, ich kann dort aber manuell nix eingeben - der Upload müsste mit einem (1) Linux-sftp-Konsolenbefehl gelöst werden. Oder kann ich irgendwie über piping was zur sftp-Konsole weiterleiten?

Weiss jemand weiteres zum Thema?

Vielne Dank für die Feedbacks.
Zuletzt geändert von jmar83 am 09.12.2019 16:34:25, insgesamt 1-mal geändert.
Freundliche Grüsse, Jan

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von uname » 06.03.2019 16:35:17

Ich kenne mich mit Windows nicht aus. Auch gehe ich mal davon aus, dass "2019_03_06__13_22_44" ein Verzeichnis ist.
Folgende Befehle hast du angegeben:

Code: Alles auswählen

scp -r 2019_03_06__13_22_44 testuser@192.168.1.21:/2019_03_06__13_22_44
sftp -r 2019_03_06__13_22_44 -oStrictHostKeyChecking=no testuser@192.168.1.21:/2019_03_06__13_22_44
Zwei Anmerkungen:
1.) vielleicht fehlt der Pfad für den "testbenutzer", / könne C:\ oder sonstwo sein, wo er keinen Zugriff hat
2.) der Zielordner wird mitkopiert, ist auf dem Ziel wohl noch nicht vorhanden und muss somit nicht angegeben werden

Daher vielleicht so:

Code: Alles auswählen

scp -r 2019_03_06__13_22_44 testuser@192.168.1.21:/Users/testuser/tmp
sftp -r 2019_03_06__13_22_44 -oStrictHostKeyChecking=no testuser@192.168.1.21:/Users/testuser/tmp
Der Pfad zum testuser kann abweichen, vielleicht muss da auch was mit c:\ stehen.
Unter Windows schauen z. B. mit "cmd" falls möglich. Vielleicht gibt der scp/sftp-Server den Pfad auch vor.
Um es irgendwo hinzukopieren einen Ordner wie z. B. oben angegeben "tmp" unterhalb anlegen.

Alternativ mal in den Logs schauen.
Du kannst evtl. auch grafisch kopieren mit Debianfilezilla. Filezilla ist evtl. schlau genug und zeigt dir die Zielpfade korrekt an.
Der Trick bei Filezilla ist irgendwo den Port 22 anzugeben, da es vor allen ein FTP-Programm ist, welches standardmäßig Port 21 verwendet.

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von jmar83 » 06.03.2019 17:11:30

Vielen Dank fürs schnelle Feedback! :-)

Das Windows-System mit dem "SolarWindows SCP/SFTP"-Server ist nicht das Problem, der läuft soweit ok. (Unter Windows mit "WinSCP" auf "localhost" getestet - läuft)

SCP/SFTP sollte ja standardisiert sein, wenn der "SolarWindows SCP/SFTP"-Server das korrekt implementiert dann ist dieser nicht das Problem.

Die Frage bezeigt sich also rein auf Linux, welches den SCP/SFTP-Client in dieser Konstellation spielt.
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von jmar83 » 06.03.2019 17:13:25

Mit FileZilla und Benutzerinteraktion zu kopieren ist kein Thema, das ganze soll automatisiert über ein Shell-Skript laufen. Das einzige wonach man dort gefragt wird, ist die Server-IP sowie das Kennwort. Der Benutzername ist hard-codiert "sftpuser". (oder sowas in dieser Art..)
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von jmar83 » 07.03.2019 19:40:53

Nochmal betone ich, dass es sich "nur" beim Server um eine Win10-Maschine mit dem "SolarWinds SCP/SFTP Server" handelt. Meine Frage war auch den Zugriff als Linux-Client bezogen, wie man das in einer Zeile macht ohne in die SFTP-Konsole zu gelangen.

Nun: habe zwar keine Ahnung, warum mir im per SFTP "mkdir" erstellten Verzeichnis "2019_03_06__13_22_44" eine gleichnamige Datei erstellt wird, plus noch eine Weitere namens "1551874964 0" (Name ist immer gleich!!)... aber das scheint (irgendwie) zu funktionieren:

Code: Alles auswählen

sftp testuser@192.168.1.21:/ <<< $'mkdir 2019_03_06__13_22_44\n put -r 2019_03_06__13_22_44\n rm 2019_03_06__13_22_44/2019_03_06__13_22_44\n rm "2019_03_06__13_22_44/1551874964 0"'
Also, dann löscht man den ganzen Kram halt nachträglich...

Oder, falls sich jemand mit Java auskennt hier ein Ansatz - braucht halt noch ne Library:

Code: Alles auswählen

import java.io.File;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

public class sftpc {
	public static void main(String[] args) throws Exception {
		/*
		if (!(args == null || args.length < 5)) {
			System.out.println("Please use it with these parameters:");
			System.out.println("sftpc ");
		}
		*/
		
		String username = "testuser";
		String host = "192.168.80.122";
		String pwd = "123";
		String remoteDir = "/";
		String localDir = "C:\\sftpcTestFilesForUpload";

		final JSch jsch = new JSch();
		final Session session = jsch.getSession(username, host);
		session.setPassword(pwd);

		final java.util.Properties config = new java.util.Properties();
		config.put("StrictHostKeyChecking", "no");
		config.put("PreferredAuthentications", "publickey,keyboard-interactive,password");
		session.setConfig(config);
		session.connect();
		final Channel channel = session.openChannel("sftp");
		channel.connect();
		System.out.println("sftp channel opened and connected.");
		final ChannelSftp channelSftp = (ChannelSftp) channel;
		final String sftpDirectory = "/";
		final File directory = new File(localDir);
		final File[] fList = directory.listFiles();

		for (final File file : fList) {
			if (file.isFile()) {
				final String filename = file.getAbsolutePath();
				channelSftp.put(filename, sftpDirectory, ChannelSftp.OVERWRITE);
				System.out.println(filename + " transferred to " + sftpDirectory);
			}
		}
	}
}
...läuft soweit ganz gut.
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von jmar83 » 07.03.2019 20:28:35

...und als Shellskript scheint das hier ziemlich gut zu laufen, schreibt jedenfalls keine komischen Dateien in das SFTP-remote-Verzeichnis!! ;-)

Code: Alles auswählen

sftp testuser@192.168.1.21:/ <<EOT
mkdir $current_time_and_date
put -r $current_time_and_date
quit
EOT
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von jmar83 » 08.03.2019 09:26:10

Irgendwie hab ich das Gefühl dass wenn man hier Windows nur schon erwähnt dass dann die Hilfebereitschaft eher sinkt...?

Kann aber auch sein dass ich mich täusche - in Zukunft wohl besser nicht mehr erwähnen, wenn man ein Problem mit einem Zielsystem mit Window$ hat...

;-)

Bin weder Linux-Freak, noch M$-Fanboy - sehe die Sache da eher pragmatisch...;-)
Freundliche Grüsse, Jan

Benutzeravatar
MSfree
Beiträge: 10727
Registriert: 25.09.2007 19:59:30

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von MSfree » 08.03.2019 09:56:19

jmar83 hat geschrieben: ↑ zum Beitrag ↑
08.03.2019 09:26:10
Irgendwie hab ich das Gefühl dass wenn man hier Windows nur schon erwähnt dass dann die Hilfebereitschaft eher sinkt...?
Ich denke, daß es eher daran liegt, daß sich hier kaum einer mit kommerzieller Software von SolarWinds auf einem Windows-Server auskennt. Wie soll man da bitte helfen, wenn man die Probleme am eigenen System nicht nachvollziehen kann?

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von jmar83 » 08.03.2019 11:31:59

Natürlich besteht die Frage, ob die das auch korrekt (gemäss dem offenen Standard) implementiert haben. Scheint aber der Fall zu sein.

WinSCP hat kein Problem*, das Java-Programm auch nicht. Und "sftp" unter Linux ebenfalls nicht, solange man alles richtig macht! ;-)

*Zuerst liess ich WinSCP auf dem gleichen Rechner laufen wie der Server lief - da dachte ich zuerst es ging weil kein Firewall dazwischen ist. War mir auch unsicher ob ich nun den TCP Port 22 generell freigaben soll, oder alles für die SolarWinds-exe-Datei. (Nur Port 22 könnte theoretisch Probleme mit den dynamischen Ports verursachen, das ist oft beim "normalen" FTP der Fall - dort reicht es dann nicht nur Port 21 TCP freizugaben, sondern muss die FTP-Server-exe-Datei komplett für eingehende Verbindungen im Window$-Firewall eingetragen werden. (Na ja, es gibt doch noch den FTP-passive-Mode, den man im Client einstellen kann... aber max. Kompatibilität ist besser als sowas, falls es überhaupt damit zusammenhängt))

Aber SSH/SFTP/SCP scheint auch zu laufen wenn man nur Port 22 für eingehende Verbindungen freigibt - also keine Problem mit sich dynamisch öffnenden Ports!

So weit, so gut, vielen Dank euch beiden!! :-)
Freundliche Grüsse, Jan

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von uname » 08.03.2019 11:37:34

Ich glaube dein sftp-Server verhält sich nicht korrekt. Irgendwie kommt erscheinbar mit den Unterordnern nicht klar.
Ich hätte erwartet, dass die mkdir-Zeile unnötig ist.
Beim rekursiven Kopieren eines Ordners sollte das Ziel diesen Ordner selbst anlegen, da der Ordner samt Inhalt kopiert wird.

Code: Alles auswählen

sftp testuser@192.168.1.21:/ <<EOT
mkdir $current_time_and_date
put -r $current_time_and_date
quit
EOT

Benutzeravatar
heisenberg
Beiträge: 3532
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von heisenberg » 08.03.2019 11:46:24

Natürlich besteht die Frage, ob die das auch korrekt (gemäss dem offenen Standard) implementiert haben. Scheint aber der Fall zu sein.
Jede Software hat Fehler. Bei einer vergleichsweise unbekannten Software, die vielleicht auch noch nicht sonderlich weit verbreitet sein mag, von Fehlerfreiheit auszugehen halte ich für gewagt. Da wäre ich erst mal ein ganzes Stück vorsichtiger. Ansonsten muß auch nicht unbedingt ein Fehler vorliegen. Vielleicht verhält sich die Software unter vielen Umständen einfach nur anders. Hierbei am besten Schritt für Schritt testen.

Dieses Mißtrauen habe ich jetzt nicht nur gegen Windows-Software, sondern auch gegen Linux-Software, die ich nicht kenne, mit der ich keine Erfahrung habe oder bei der merke, dass die irgendwie nicht sauber zu sein scheint. Und es gibt auch viel Windows-Software, der ich sehr wohl zutraue, dass sie Ihren Zweck sehr gut erfüllt.

Ich habe dabei erst mal grundsätzlich etwas Mißtrauen gegen diese Software und würde da eher auf Cygwin setzen, womit der originale OpenSSH-Server zur Verfügung steht und die Besonderheiten durch den Einsatz von Windows deutlich geringer sein dürften als mit der aktuell eingesetzten Software. Damit habe ich unter Windows bereits öfters mal gearbeitet und keine Überraschungen erlebt.

Vielleicht kannst Du Deine Tests gleichzeitig an einer Linux-Büchse testen um da schon mal Unterschiede zu sehen. Ich würde vermuten, dass da einiges zu Tage gefördert wird.

Mein erster Eindruck beim überfliegen des Threads war: Probleme mit dem kopieren via SCP? Das kann doch eigentlich kein Problem sein!
in Zukunft wohl besser nicht mehr erwähnen, wenn man ein Problem mit einem Zielsystem mit Window hat...
Wenn man ein Problem hat, dann sind alle Details zur Umgebung wichtig. Wenn da bewusst Details verheimlicht werden, beschäftigen sich vielleicht viele Helfer vollkommen unnötigerweise und mit weniger Erfolgschancen als nötig. Ich wäre dann tendenziell sauer, wenn mir jemand bewusst wesentliche Informationen vorenthält und ich überflüssigerweise meine Zeit verschwende.
Zuletzt geändert von heisenberg am 08.03.2019 13:56:21, insgesamt 1-mal geändert.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von jmar83 » 08.03.2019 13:37:05

Vielen Dank für die beiden Beiträge!

@uname: Soweit ich herausgefunden habe, unterstützt dieser SolarWinds-Server nur die Versionen 1.x sowie 2.x., wobei man heutzutage schon weiter ist. (Details zur neusten Version sind mir aktuell nicht bekannt, hatte ja bis jetzt auch nie Probleme damit...) Und dort ist dann eben das "mkdir" trotzdem notwendig.

Was ich schräg finde, ist dass bei der Ausführung auf 1 Zeile zusätzliche eine Datei, mit dem gleich Namen wie das erstellte Verzeichnis im erstellten Verzeichnis auftaucht - des Weiteren noch eine Datei "1551874964 0". Vielleicht mache ich aber nur was falsch, bei der Ausführung mit 1 Zeile. (?)


@heisenberg: Die Sache mit dem Windows will halt der Chef so, damit er (mit dem Server) auch klarkommt. Ferner zeigt das SFTP-Wurzelverzeichnis noch auf ein Google Drive, ich bin mir nicht sicher ob das mit Linux einfacher wäre. Und danke für den Tipp mit "Cygwin". Unter sourceforge.net würde es meines Wissen nach auch noch etwas für Windows (?) geben, das zumindest SCP kann. Name ich ich gerade vergessen und den Link konnte ich auch nicht mehr auffinden. Jedenfalls habe ich aber in Erinnerung, dass es weit weniger stabil als der SolarWinds-Server ist...

Sonst muss ich Dir in allen angesprochenen Punkten recht geben, keine Frage. Und die Sache mit Windows vs. debianforum.de war auch nur halbwegs ernst gemeint - war jedenfalls gespannt, was für Antworten da kommen...;-)
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von jmar83 » 08.03.2019 13:50:56

Nach ja, noch was zu meinen Befehlen: das "\n" sollte korrekt sein als Delimiter auf 1 Zeile, daran sollte es nicht liegen.

Wenn ich auf "mkdir" verzichte, dann kommt eine Fehlermeldung mit "canonical", wenn ich mich nicht täusche diese: https://stackoverflow.com/questions/174 ... ry-in-sftp
Freundliche Grüsse, Jan

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von uname » 08.03.2019 21:00:31

Vielleicht Software tauschen
https://www.pcwdld.com/10-best-free-sftp-servers

Oder Chef für Linux schulen bzw. Tools an die Hand geben.

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Ganzes Verzeichnis mit "scp" oder "sftp" übertragen?

Beitrag von jmar83 » 09.03.2019 10:16:14

Unter https://www.pcwdld.com/10-best-free-sftp-servers steht der SolarWinds-Server ganz oben, allerdings scheint es sich bei dieser Seite nicht um ein Ranking zu handeln. Dort ist auch "freesshd" gelistet, das ist die Software deren Name ich vergessen habe. War damals allerdings nicht besonders stabil.

BitVise kostet. (Deren kostenloser "SSH Client" ist unter Windows allerdings TOP!) Aber wie gesagt hab ich es ja hingekriegt. :-) Mit dem Shell-Skript, mit dem ich die sftp-Konsoleneingabe "simulieren" kann ("<<EOT") macht es ja keine komischen Sachen wie beim 1-Zeiler. Und da meine Anwendung (Clientseite) ein Shell-Skript ist, brauch ich diesen gar nicht mehr. Habe das bis anhin gar nicht gekannt gewusst mit dem "<<EOT".
"Oder Chef für Linux schulen bzw. Tools an die Hand geben."
Bei gewissen Sachen (z.B. auch bei den LAMP-Servern) wäre das sicher ideal. Das Shell-Skript, welches ich am Erstellen bin, soll auch für praktisch alle nutzbar sein. (Inkl. kleiner Doku von ca. 1 Seite)
Freundliche Grüsse, Jan

Antworten