В этой статье будут описаны автоматические действия с SFTP сервером. Например — передача или скачивание файлов с помощью bash скрипта.

Утилита sshpass

Когда вы подключаетесь по SSH, то для подключения используете пароль или ключ. Если нет возможности настроить подключение по ключам, то остаётся использовать пароль. Но утилита ssh, с помощью которой мы подключаемся к серверу не разрешает подставлять пароль. Вместо этого она использует псевдо-терминал для ввода пароля вручную.

alex@deb-11:~$ ssh alex@192.168.0.34
alex@192.168.0.34's password:

Это затрудняет выполнение автоматических действий, когда у вас нет возможности использовать SSH ключи. Например такая команда не работает:

alex@deb-11:~$ (echo password) | ssh alex@192.168.0.34
Pseudo-terminal will not be allocated because stdin is not a terminal.
alex@192.168.0.34's password:

Здесь даже на терминале появилось предупреждение о том, что STDIN это вам не терминал!

Для решения этой задачи придумали утилиту sshpass, которую можно установить из репозиториев:

alex@deb-11:~$ sudo apt install sshpass

С помощью этой утилиты можно передать пароль утилите ssh. Делается это таким способом:

alex@deb-11:~$ sshpass -p "password" ssh alex@192.168.0.34
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-52-generic x86_64)

Выполнение команд ftp из bash скрипта

Но в этой статье описывается sftp а не просто ssh. Поэтому подключение будет выполнятся с помощью утилиты sftp:

alex@deb-11:~$ sshpass -p "password" sftp alex@192.168.0.34
Connected to 192.168.0.34.
sftp>

После подключения вы можете, с помощью команд ftp, работать с файлами. Вот некоторые команды:

  • ls — посмотреть список файлов в каталоге на sftp сервере;
  • lls — посмотреть список файлов в каталоге на локальном сервере;
  • pwd — посмотреть текущий каталог на sftp сервере;
  • lpwd — посмотреть текущий каталог на локальном сервере;
  • put — загрузить файл на sftp сервер;
  • get — скачать файл с sftp сервера.

Но мы хотим выполнять команды не интерактивно, а например из bash скрипта. Например, чтобы подключиться, выполнить команду и отключиться от SFTP сервера, можно выполнить команду:

alex@deb-11:~$ echo -e "ls" | sshpass -p "password" sftp alex@192.168.0.34
Connected to 192.168.0.34.
sftp> ls
ubuntu.txt
alex@deb-11:~$

То есть на удалённом сервере, в домашнем катоге пользователя alex лежит файл с именем ubuntu.txt.

А загрузить файл можно с помощью такой команды:

alex@deb-11:~$ echo -e "put debian.txt" | sshpass -p "password" sftp alex@192.168.0.34
Connected to 192.168.0.34.
sftp> put debian.txt
Uploading debian.txt to /home/alex/debian.txt
alex@deb-11:~$

То-есть мы передаём файл debian.txt на sftp сервер.

Создаём bash функцию для автоматизации

Ну и чтобы как то соответствовать названию статьи «Автоматические действия с SFTP» нужно что-нибудь автоматизировать, или хотя-бы облегчить ручную работу:)

Можем сделать bash функцию и записать её в файл .bashrc:

alex@deb-11:~$ nano .bashrc
ftp-put() {
        echo -e "put $1" | sshpass -p "$3" sftp "$2"@"$4"
}

Теперь передать файл на SFTP сервер можно таким образом:

alex@deb-11:~$ ftp-put test.txt alex password 192.168.0.34
Connected to 192.168.0.34.
sftp> put test.txt
Uploading test.txt to /home/alex/test.txt
alex@deb-11:~$

То есть передаём имя файла, имя пользователя и пароль, и адрес sftp сервера.

По подобию вы можете выполнять и другие действия с sftp сервером. Или, например, выполнять какие-то действия по расписанию.


Возможно вам понравятся и другие подобные статьи:

Сводка
Автоматические действия с SFTP
Имя статьи
Автоматические действия с SFTP
Описание
В этой статье будут описаны автоматические действия с SFTP сервером. Например - передача или скачивание файлов с помощью bash скрипта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *