🏠 | 💻 | Linux | Bash |

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

Introduction

Подсоединиться по 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
-eq -gt …: Операторы сравнения
if else: Условные операторы
Цикл while
date
Переход на новую строку
Арифметические операции
Errors Bash
Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su, info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: