Передать файл или пароль по SFTP в Bash скрипте
Введение | |
Expect | |
Передача аргументов | |
Похожие статьи |
Введение
Подсоединиться по sftp в bash очень просто sftp user@domain.
Если у вас настроена авторизация по ключу то сразу появится sftp>
Если не настроена, то нужно вводить пароль.
Допустим, нужно передать файл, причём сделать это из скрипта, а не вводом команд с клавиатуры.
Новичка это задание может поставить в тупик, но если воспользоваться
expect
всё должно получиться.
Expect
expect это язык неидентичный
bash
, поэтому для него понадобится
отдельный скрипт
Будем вызывать этот скрипт из основного bash скрипта
#!/bin/bash # Часть вашего bash скрипта до передачи по sftp # Вызов скрипта на языке expect # В качестве первого аргумента передаём 1 ./expect_sftp_script 1 # Часть вашего 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 | |
Скрипты | |
awk | |
grep | |
sed | |
Ошибки Bash | |
Zsh | |
Unix |