🏠 | 💻 IT | Linux | Bash |

Передать файл или пароль по SFTP в Bash скрипте

Введение

Подсоединиться по sftp в bash очень просто sftp user@domain.

Если у вас настроена авторизация по ключу то сразу появится sftp>

Если не настроена, то нужно вводить пароль.

Допустим, нужно передать файл, причём сделать это из скрипта, а не вводом команд с клавиатуры.

Новичка это задание может поставить в тупик, но если воспользоваться expect всё должно получиться.

Expect

expect это язык неидентичный bash , поэтому для него понадобится отдельный скрипт

Будем вызывать этот скрипт из основного bash скрипта

#!/bin/bash # Часть вашего bash скрипта до передачи по sftp # Вызов скрипта на языке expect ./expect_sftp_script # Часть вашего bash скрипта после по sftp

Теперь перейдём непосредственно к скрипту на языке expect

Обратите внимание на то, что первой строчкой должен быть #!/usr/bin/env expect а не #!/bin/bash

Именно поэтому нельзя совместить два скрипта в одном файле

#!/usr/bin/env expect # подключимся к серверу spawn sftp root@server expect "sftp>" # Можно начать передавать команды send "lcd /opt/input" # После каждой команды имитируем нажатие Enter send \n expect "sftp>" send "cd /tmp" send \n expect "sftp>" send "put $test_file_sftp" send \n expect "sftp>" send "exit"

Передача аргументов

Из bash скрипта можно передать переменные в expect скрипт

Вызовем expect скрипт с одним аргументом

#!/bin/bash # Часть вашего bash скрипта до передачи по sftp # Вызов скрипта на языке expect # В качестве первого аргумента передаём 1 ./expect_sftp_script 1 # Часть вашего bash скрипта после по sftp

#!/usr/bin/env expect set arg_from_bash [lindex $argv 0] spawn sftp root@server expect "sftp>" send "lcd /opt/input" send \n expect "sftp>" send "cd /tmp" send \n expect "sftp>" send "put $arg_from_bash" send \n expect "sftp>" # Закрываем соединение send "exit"

Статьи о Bash
Bash
Bash Scripting
if else: Условные операторы
Цикл while
date
Переход на новую строку
Арифметические операции
Ошибки Bash

Если остались вопросы - смело задавайте их в комментариях либо воспользуйтесь поиском по сайту

Поиск по сайту

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: