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

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


Odpowiedzi:


15

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

#!/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

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


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 kalenpw@184.155.136.254:/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.


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 kalenpw@184.155.136.254:/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 *).


2

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

curl -u user -T file.tar sftp://example.com/home/user/
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.