Wykonaj polecenie w połączeniu sftp za pomocą skryptu

13

To jest bardzo podstawowe pytanie. Jestem po prostu całkiem nowy i nie mogę wymyślić, jak to zrobić. Googling niestety nigdzie mnie nie doprowadził.

Moim celem jest połączenie się z serwerem sftp na serwerze, przesłanie pliku, a następnie rozłączenie.

Mam następujący skrypt:

UpdateJar.sh

#!/bin/bash

sftp -oPort=23 [email protected]:/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

problem polega na tym, że ten skrypt ustanowi połączenie sftp, a następnie nic nie zrobi. Po ręcznym wpisaniu polecenia exit w połączeniu próbuje wykonać polecenie put, ale ponieważ sesja sftp została zamknięta, mówi tylko: polecenie put: nie znaleziono polecenia.

Jak mogę to poprawnie działać?

Dzięki

kalenpw
źródło

Odpowiedzi:

15

Możesz zmienić skrypt, aby przekazywać polecenia w dokumencie tutaj, np.

#!/bin/bash

sftp -oPort=23 [email protected]:/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

<<Marker następuje nazwa ( EOF) informuje skrypt przekazać następujące wiersze aż nazwa znajduje się na początku linii (przez siebie).

Thomas Dickey
źródło
Niesamowite, że zrobiło dokładnie to, czego potrzebowałem. Będę musiał przeczytać tutaj dokumenty. Dzięki za szybką odpowiedź. Przyjmę ją za 8 minut.
kalenpw
Nie ma problemu (szukałem duplikatu, ale znalazłem tylko jeden zamknięty jako „niejasny”).
Thomas Dickey,
Czy jesteś pewien, że serwer nie zadławi się komentarzami skryptu powłoki?
alk
Również to podejście zależy od rodzaju powłoki.
alk
@alk skrypt działa z komentarzami i bez komentarzy
kalenpw,
5

Może wolisz używać scpzamiast sftp. scpzachowuje się podobnie jak zwykłe cppolecenie, ale pliki mogą być zdalne:

scp -P 23 /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar [email protected]:/home/kalenpw/TestWorld/plugins

Spowoduje to skopiowanie pliku na komputerze lokalnym do katalogu na komputerze zdalnym, bez konieczności korzystania ze starego interfejsu poleceń w stylu ftp.

Te ssh, scpi sftpusługi są zazwyczaj dostępne, jeśli którykolwiek z nich; ten sam program demon udostępnia je wszystkie jednocześnie. Zasadniczo administrator serwera może wyłączyć dowolne z nich, ale w praktyce zdarza się to dość rzadko.

db48x
źródło
Nie wiedziałem wcześniej o scp wygląda bardzo przydatnie. I miałeś rację scpjest już dostępny na mojej maszynie
kalenpw
4

Możesz także użyć -bopcji sftpwskazania pliku zawierającego polecenia dla sftp.

Na przykład możesz umieścić wszystkie swoje polecenia w pliku 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

i działa sftpjako:

sftp -oPort=23 -b sftp_commands.txt [email protected]:/home/kalenpw/TestWorld/plugins 

Lub możesz przekazać polecenia również przez STDIN, jeśli nie chcesz używać pliku.

Od man sftp:

-b plik wsadowy

Tryb wsadowy czyta szereg poleceń z wejściowego pliku wsadowego zamiast standardowego wejścia. Ponieważ brakuje interakcji użytkownika, należy go używać w połączeniu z nieinteraktywnym uwierzytelnianiem. Plik wsadowy „-” może być użyty do wskazania standardowego wejścia. sftp przerwie działanie, jeśli któreś z poniższych poleceń nie powiedzie się: get, put, reget, zmień nazwę, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, dowiązanie symboliczne i lmkdir. Zakończenie w przypadku błędu można wyłączyć na podstawie polecenia, ustalając wstępnie znak „-” (na przykład -rm / tmp / blah *).

heemayl
źródło
2

Inną opcją byłoby użycie curl :

curl -u user -T file.tar sftp://example.com/home/user/
Pere
źródło