Виконати команду в sftp-з'єднанні через скрипт


13

Це дуже основне запитання, я просто новачок, коли я базуюсь, і не міг зрозуміти, як це зробити. Гуглінг, на жаль, нікуди не дістав мене.

Моя мета - підключитися з sftp до сервера, завантажити файл та відключитись.

У мене є такий сценарій:

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

Проблема полягає в тому, що цей скрипт встановить sftp-з'єднання, а потім нічого не робити. Після введення вручну виходу у зв’язку він намагається виконати команду put, але оскільки сеанс sftp закритий, він просто говорить put: команда не знайдена.

Як я можу змусити це правильно працювати?

Спасибі


Відповіді:


15

Ви можете змінити свій сценарій для передачі команд у документі тут, наприклад,

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

<<Маркер слід ім'я ( EOF) говорить сценарієм пройти наступні рядки до тих пір , поки ім'я не буде знайдено на початку рядка (сам по собі).


Чудово, що зробив саме те, що мені потрібно. Мені доведеться зачитати тут документи. Дякую за швидку відповідь, я прийму її за 8 хв.
— kalenpw

Немає проблем (я шукав дублікат, але знайшов лише закритий як "незрозумілий").
— Томас Дікі

Ви впевнені, що сервер не задихнеться від коментарів сценарію оболонки?
— алк

Також такий підхід залежить від виду оболонки.
— алк

@alk сценарій працює з коментарями і без них
— kalenpw

5

Ви можете скористатися scpзамість цього sftp. scpповодиться так, як cpробить звичайна команда, але файли можуть бути віддаленими:

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

Це копіює файл на локальній машині в каталог на віддаленій машині, не використовуючи інтерфейс командного інтерфейсу старого школи.

Послуги ssh, scpта sftpпослуги зазвичай доступні, якщо вони є; та сама програма демонів забезпечує їх усі одночасно. В принципі, адміністратор сервера міг вибрати відключення будь-якого з них, але на практиці це досить рідко.


Заздалегідь не знав про scp, виглядає дуже корисно. І ви мали рацію, scpце вже доступно на моїй машині
— kalenpw

4

Ви також можете скористатися -bопцією, sftpщоб вказати файл, що містить команди для sftp.

Наприклад, ви можете помістити всі свої команди у файл 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

і працювати sftpяк:

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

Або ви можете також передавати команди через STDIN, якщо ви не хочете використовувати файл.

Від man sftp:

-b пакетний файл

Пакетний режим читає серію команд із вхідного пакетного файлу замість stdin. Оскільки йому не вистачає взаємодії з користувачем, його слід використовувати разом з неінтерактивною аутентифікацією. Пакетний файл "-" може використовуватися для позначення стандартного введення. sftp перерве, якщо будь-яка з наступних команд не вдасться: отримати, поставити, рекет, перейменувати, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink та lmkdir. Припинення помилки може бути придушене командою за допомогою команди, попередньо закріпивши команду символом '-' (наприклад, -rm / tmp / blah *).


2

Іншим варіантом буде використання curl :

curl -u user -T file.tar sftp://example.com/home/user/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.