Виконати команду в 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.