Hallo Forum, gibt es eine möglichkeit unter Linux den SFTP Befehl direkt mit put oder get zu Verknüpfen? Also als single command line? SCP kann sowas, aber mein Server unterstützt kein SCP es geht nur SFTP. Sowas hier geht. Aber jetzt muss da noch das put bzw get rein und welches File.. sshpass -p 'Password' sftp -v -oStrictHostKeyChecking=no -oIdentityFile=$HOME/.ssh/test.rsa -P 22 user@server:/Upload/
:
Verschoben durch User
Linux Newbie schrieb: > Hallo Forum, > > gibt es eine möglichkeit unter Linux den SFTP Befehl direkt mit put oder > get zu Verknüpfen? Also als single command line? Probiere mal
1 | $ man wget |
Das könnte mindestens für den Download das sein, was Du suchst. Ob auch Upload funktioniert kann ich nicht sagen.
-b batchfile Batch mode reads a series of commands from an input batchfile instead of stdin. Since it lacks user interaction it should be used in conjunction with non-interactive authentica‐ tion. A batchfile of ‘-’ may be used to indicate standard input. sftp will abort if any of the following commands fail: get, put, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, and lmkdir. Termination on error can be suppressed on a command by command basis by prefixing the command with a ‘-’ character (for example, -rm /tmp/blah*).
es gibt auch noch ein "wput" (muss wahrscheinlich erst uebers paketmanagment installiert werden)
wput scheint aber kein SFTP zu unterstützen. Nur FTP. Für FTP nutze ich ncftp.
Linux Newbie schrieb: > SCP kann sowas, aber mein Server unterstützt kein SCP es geht nur SFTP. Wenn sftp geht, sollte m.W. ssh korrekt eingerichtet sein und scp auch gehen. Ich habe zumindest einen ssh-Server, und auf den kann ich ohne weiteres Zutun mit scp und sftp zugreifen. Beim Server ist in /etc/ssh/sshd_config zu sehen:
1 | Subsystem sftp /usr/lib/openssh/sftp-server |
D.h. sftp muss evtl. explizit erlaubt werden, scp wohl nicht. Geht bei dir ein Zugang per ssh? Notfalls kann man sich ein expect-Skript basteln. Aber wie gesagt gehe ich davon aus, daß scp möglich sein sollte.
ssh zugriff geht. SCP geht nicht da kein Filesystem auf dem Server ist. Der Server sieht nach außen hin aus wie ein Filesystem aber dahinter speichert er die Daten in einer verschlüsselten Datenbank. Ist anscheined leider ein Windoof Server.. In der Beschreibung steht das SCP nicht unterstüzt wird da SCP direkten Zugriff auf ein Filesystem benötigt. Script ist blöd da ich den Befehl mit system() aus einem C Programm aufrufen möchte. Und mir halt Teile des Befehls aus variablen zusammenbaue. Da habe ich direkt noch 1 Fragen: 1) In der man bei meinem Archlinux steht das system() wenn bei sh usw. kein Fehler auftritt den Rückgabewert des ausgeführten Befehls zurück gibt. Bei sh steht das auch so. Nun bekomme ich aber z.B. bei ncftpget eine 0 zurück obwohl der Server nicht erreichbar ist was eigentlich eine 1 liefern müsste. Warum geht es da nicht? Bzw. wie mache ich sonst so etwas? Mit popen und dann die Rückgabe parsen? Oder gibt es da andere Möglichkeiten? Möchte ungern mit libs anfangen denn ich nutze auch noch tar und sha1 usw. (da muss ich noch schaun ob die Rückgabe passt!)
Linux Newbie schrieb: > Warum geht es da nicht? Da musst du den Autor von nftp fragen; wahrscheinlich fand er es nicht wichtig :-) Linux Newbie schrieb: > Script ist blöd da ich den Befehl mit system() aus einem C Programm > aufrufen möchte. Unter Linux? Da kann man in einer Kommandozeile für system() viel unterbringen ...
1 | system( "( echo "spawn telnet 192.168.0.15"; echo "expect login: { send \"root\\r\" }"; echo "expect # { send \"mount -uw /mnt/system\\r\" }"; echo "expect # { send \"exit\\r\" }" ) | expect" ); |
Dieses Kommando macht im Klammerpaar ein paar echo, die als pipe in den expect-Aufruf gefüttert werden und dort als dessen Standardeingabe gelesen werden. Im Einzelnen wird dem expect nacheinander gesagt: - ein telnet zu starten, dann auf "login:" zu warten - dann "root" einzugeben (in der Hoffnung, daß in diesem Fall kein PW nötig ist, sonst halt ein expect mehr mit dem PW) - dann wieder auf ein "#" warten und ein mount absetzen - wieder auf "#" warten und "exit" absetzen. Mit expect kann man sowas für andere Kommandos wie ssh oder sftp auch machen. Im Fall von sftp wird natürlich auch eine Batchdatei gehen, wie von RTFM vorgeschlagen.
:
Bearbeitet durch User
Hmm, okay das wäre auch noch eine Möglichkeit. Ich mach ein system() mit sftp und mit expect und put bzw get usw. Muss ich mal schaun. Oder aber ich setze nen eigenen Server auf der SCP kann... Bzgl. der Frage mit den Rückgabewerten: die man von system, die man von sh sagen das wenn kein Fehler auftritt der Rückgabewert von dem aufgerufenen Befehl also von ncftp zurückgegeben wird. in man ncftp steht das 0 bei alles ok und 1 bei host nicht erreichbar zurückgegeben wird. Also erwarte ich eine 1 wenn der Host nicht erreichbar ist. Aber ich bekomme 0. Das meine ich.. was geht da nicht? An meinem C-Code kann es ja kaum liegen.. ret = system("......"); Sollte ja ret 1 enthalten.. Oder gibt system bereits den Werst nach WEXITSTATUS(ret) aus? Aber selbst dann passt da was nicht. Habe ich die man falsch verstanden? Denn z.B. bei system("ping...."); ging es auch nicht. Obwohl es gehen müsste. Im Internet findet man einige antworten, dass es bei manchen geht und bei manchen nicht (ubuntu ging glaube, debian oder arch nicht..). Habe ping mit popen genutzt und parse dann die pipe nach Connection failed oder so ähnlich. Kann man irgendwie rausfinden warum es nicht geht bzw. woran liegt es das es bei manchen geht und bei manchen nicht?
Linux Newbie schrieb: > > Script ist blöd da ich den Befehl mit system() aus einem C Programm > aufrufen möchte. Und mir halt Teile des Befehls aus variablen > zusammenbaue. > > Da habe ich direkt noch 1 Fragen: > 1) > In der man bei meinem Archlinux steht das system() wenn bei sh usw. kein > Fehler auftritt den Rückgabewert des ausgeführten Befehls zurück gibt. > Bei sh steht das auch so. > > Nun bekomme ich aber z.B. bei ncftpget eine 0 zurück obwohl der Server > nicht erreichbar ist was eigentlich eine 1 liefern müsste. > > Warum geht es da nicht? > Bzw. wie mache ich sonst so etwas? Mit popen und dann die Rückgabe > parsen? > Oder gibt es da andere Möglichkeiten? Möchte ungern mit libs anfangen > denn ich nutze auch noch tar und sha1 usw. (da muss ich noch schaun ob > die Rückgabe passt!) File mit den Commandos ist angeblich scheisse, aber popen und Ausgabe parsen soll besser sein. Denk noch mal drüber nach!
popen und Ausgabe parsen habe ich bei ping gemacht.. ncftp usw. wäre blöd mit dem File weil ich z.b. den Port und das Password usw. in strings innerhalb meines c Programms speicher und verändere und dann den System Befehl daraus zusammenbau. Ich müsste ja dann erstmal die Strings usw angepasst in das File schreiben und dann system mit dem File aufrufen..
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.