Eseguire il comando nella connessione sftp tramite script


13

Questa è una domanda basilare a cui sono appena arrivato e non sono riuscito a capire come farlo. Purtroppo Google non mi ha portato da nessuna parte.

Il mio obiettivo è connettermi con sftp a un server, caricare un file e quindi disconnettermi.

Ho il seguente script:

UpdateJar.sh

#!/bin/bash

sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins
#Change directory on server
#cd /home/kalenpw/TestWorld/plugins

#Upload file
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar

exit

il problema è che questo script stabilirà una connessione sftp e quindi non farà nulla. Dopo aver digitato manualmente exit in connessione, tenta di eseguire il comando put ma poiché la sessione sftp è stata chiusa, dice solo put: comando non trovato.

Come posso farlo funzionare correttamente?

Grazie


Risposte:


15

Puoi cambiare il tuo script per passare i comandi in un documento qui, ad es.

#!/bin/bash

sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins <<EOF
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar   
exit
EOF

Il <<marcatore seguito dal nome ( EOF) indica allo script di passare le seguenti righe fino a quando non viene trovato il nome all'inizio della riga (da solo).


Fantastico che ha fatto esattamente quello di cui avevo bisogno. Dovrò leggere qui i documenti. Grazie per la risposta rapida Lo accetterò tra 8 min.
Kalenpw,

Nessun problema (ho cercato un duplicato ma ne ho trovato solo uno chiuso come "poco chiaro").
Thomas Dickey,

Sei sicuro che il server non si strozzerà con i commenti dello script di shell?
alk

Anche questo approccio dipende dal tipo di shell.
alk

@alk la sceneggiatura funziona con e senza commenti
kalenpw

5

Si potrebbe preferire utilizzare scpinvece di sftp. scpsi comporta in modo molto simile al normale cpcomando, ma i file possono essere remoti:

scp -P 23 /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins

Questo copia il file sul tuo computer locale in una directory sul computer remoto senza dover utilizzare l'interfaccia di comando in stile ftp di vecchia scuola.

I ssh, scpe sftpservizi sono di solito disponibili se qualcuno di loro sono; lo stesso programma demone fornisce tutti contemporaneamente. In linea di principio, l'amministratore del server potrebbe scegliere di disabilitarne uno, ma in pratica è abbastanza raro.


Prima non sapevo di SCP sembra molto utile. E avevi ragione scpè già disponibile sulla mia macchina
kalenpw l'

4

È inoltre possibile utilizzare l' -bopzione di sftpper indicare un file contenente comandi per sftp.

Ad esempio, puoi mettere tutti i tuoi comandi nel file sftp_commands.txt:

cd /home/kalenpw/TestWorld/plugins
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit

ed esegui sftpcome:

sftp -oPort=23 -b sftp_commands.txt kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins 

Oppure puoi passare i comandi anche tramite STDIN se non vuoi usare un file.

Da man sftp:

-b file batch

La modalità batch legge una serie di comandi da un file batch di input anziché da stdin. Poiché manca l'interazione dell'utente, deve essere utilizzato insieme all'autenticazione non interattiva. Un file batch di '-' può essere utilizzato per indicare l'input standard. sftp si interromperà se uno dei seguenti comandi fallisce: get, put, reget, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink e lmkdir. La terminazione per errore può essere soppressa su un comando dalla base di comando pre-fissando il comando con un carattere '-' (ad esempio, -rm / tmp / blah *).


2

Un'altra opzione sarebbe quella di usare l' arricciatura :

curl -u user -T file.tar sftp://example.com/home/user/
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.