Forum: PC Hard- und Software Linux sftp & put Befehl als single command line?


von Linux Newbie (Gast)


Lesenswert?

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
von A. H. (ah8)


Lesenswert?

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.

von RTFM (Gast)


Lesenswert?

-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*).

von Walter (Gast)


Lesenswert?

es gibt auch noch ein "wput" (muss wahrscheinlich erst uebers 
paketmanagment installiert werden)

von Linux Newbie (Gast)


Lesenswert?

wput scheint aber kein SFTP zu unterstützen. Nur FTP.
Für FTP nutze ich ncftp.

von Klaus W. (mfgkw)


Lesenswert?

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.

von Linux Newbie (Gast)


Lesenswert?

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!)

von Klaus W. (mfgkw)


Lesenswert?

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
von Linux Newbie (Gast)


Lesenswert?

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?

von RTFM (Gast)


Lesenswert?

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!

von Linux Newbie (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.