- Automate SFTP using shell script with password in Linux/Unix
- What is SFTP Batch File and How to automate SFTP using shell script with password in Batch Mode?
- SFTP shell script without prompting password (passwordless SFTP)
- Step 1: Setup SFTP and Configure SFTP authorized_keys
- Step 2: Create SFTP script to transfer files without prompting password
- Step 3: Verification
- My Lab Environment
- Automate SFTP using shell script with password (Using Expect)
- Step 1: Install Expect on client node
- Step 2: SFTP command example in Unix shell script with password
- Step 3: Verification
- My Lab Environment
- Related Posts
- Как использовать команду SFTP для передачи файлов Linux
- How to Use Linux SFTP Command to Transfer Files
- В этом руководстве мы покажем Вам, как использовать команду Linux sftp .
- Прежде чем вы начнете
- Установление SFTP-соединения
- Команды SFTP
- Навигация по SFTP
- Передача файлов с SFTP
- Загрузка файлов с помощью команды SFTP
- Загрузка файлов с помощью команды SFTP
- Файловые манипуляции с SFTP
- Вывод
- Как запустить команду sftp с паролем из скрипта Bash?
Automate SFTP using shell script with password in Linux/Unix
Table of Contents
In this article I will share sample SFTP scripts to transfer files covering below scenarios in Linux or Unix environment
- Use batch file with SFTP shell script without prompting password
- Automate SFTP using shell script with password
- Use batch file with SFTP shell script with password example
- SFTP command example in unix shell script with password
- Use passwordless sftp in script
What is SFTP Batch File and How to automate SFTP using shell script with password in Batch Mode?
- Batch File in SFTP can be a plan text format file which contains a series of commands.
- These commands are read by SFTP in the sequential order from top to down
- This batch file is used to automate SFTP file transfers, can also be combined with scripts to transfer files without any prompts
- Use -b with sftp to provide the batch file name and path and to use batch mode for sftp file transfers in scripts
- Batch mode reads a series of commands from an input batchfile instead of stdin.
- Since batch mode lacks interactions, you can use batch file with SFTP shell script without prompting password using sftp authorized_keys
- Batch file can also be used to automate SFTP using shell script with password but you may need additional tools such as sshpass, expect etc to avoid password prompts and user interaction
- A batchfile of ‘ — ’ may be used to indicate standard input.
- sftp will abort if any of the following commands fail: get, put, reget, reput, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, and lmkdir.
- Termination on error can be sup‐pressed on a command by command basis by prefixing the command with a ‘-’ character (for example, -rm /tmp/blah* ).
So with the above explanation we know using batch file we can automate SFTP file transfers with scripts for both the situations
- SFTP shell script without prompting password i.e. passwordless SFTP (using sftp authorized_keys )
- SFTP shell script with password (using expect , sshpass or similar tools to pass the password)
SFTP shell script without prompting password (passwordless SFTP)
Step 1: Setup SFTP and Configure SFTP authorized_keys
I have already shared step by step guide to setup SFTP in my previous article with chroot jail and . So I will use the same server to create and use SFTP shell script without prompting password and performing passwordless SFTP.
In the same article I have also added a chapter to configure SFTP authrorized_keys to enable passwordless SFTP so I will not repeat the same steps here.
Step 2: Create SFTP script to transfer files without prompting password
I have taken the template of below script from Wicked Cool Scripts and modified it to transfer files without prompting password. You can follow the additional comments I have added in the script to understand the overall functionality.
Step 3: Verification
Now since we have our SFTP script to transfer files without password using sftp authorized_keys , it is time to verify the script functionality:
My Lab Environment
SFTP Client:
- Hostname : server1.example.com
- IP Address : 10.10.10.12
- Source directory which contains files to be transferred : /src_dir
SFTP Server:
- Hostname: server2.example.com
- IP Address : 10.10.10.13
- Remote directory which contains files to be collected : dest_dir
- Chroot Jail path : /opt/sftp-jails/deepak
We will create some new files under our source directory on server1
Next use our sftp script to transfer files from server1 to server2
So all the files were transferred successfully using batch file with SFTP script without prompting password.
Next if we try to re-run the script, then you see since there are no newer files to transfer, the script does nothing.
So we will create some more new files under our source directory on server1
Next re-run the sftp script to transfer files.
As expected the new files were automatically identified and transferred using batch file with SFTP script without prompting password.
Automate SFTP using shell script with password (Using Expect)
Now you can automate SFTP using shell script with password in combination with multiple third party tools such as expect or sshpass . In our example I will show SFTP command example in Unix shell script with password using expect
Step 1: Install Expect on client node
Assuming that you already have a SFTP server configured, the first step would be to install expect on your client node (which for us is server1 ). By default expect is not installed on all the Linux and Unix variant. Since I am using RHEL/CentOS 7/8 variant, I will install expect using yum/dnf
Step 2: SFTP command example in Unix shell script with password
Next we will create a script in combination with bash and expect to automate SFTP using shell script with password.
So the user has to pass the user’s password as last input argument. The script can also be enhanced to pass an encrypted password and then decrypt it within the script to increase the security.
Below is a sample expect script to execute SFTP command example in Unix shell script with password:
We can place this expect script in our existing /tmp/sftpsync.sh which we created earlier
Step 3: Verification
Now since we have our SFTP command example in Unix shell script with password using expect and batch file, it is time to verify the script functionality:
My Lab Environment
SFTP Client:
- Hostname : server1.example.com
- IP Address : 10.10.10.12
- Source directory which contains files to be transferred : /src_dir
SFTP Server:
- Hostname : server2.example.com
- IP Address : 10.10.10.13
- Remote directory which contains files to be collected : dest_dir
- Chroot Jail path : /opt/sftp-jails/deepak
We will create some new files under our source directory on server1
Next execute the script to verify if automate SFTP using shell script with password is working:
As expected the new files are transferred to server2’s destination directory. So our SFTP command example in Unix shell script with password using expect and batch file is working.
If we re-run the script without adding new files:
Since there are no new files on our source directory, SFTP command example in Unix shell script with password executed but no files were transferred.
Lastly I hope the steps from the article to automate SFTP using shell script with password on Linux and Unix was helpful. So, let me know your suggestions and feedback using the comment section.
Related Searches: SFTP command example in Unix shell script with password, SFTP shell script without prompting password, sftp script to transfer files, sftp script with password authentication, sftp batch file password example, automate sftp using shell script with password in Unix
Related Posts
Didn’t find what you were looking for? Perform a quick search across GoLinuxCloud
If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.
For any other feedbacks or questions you can either use the comments section or contact me form.
Thank You for your support!!
Источник
Как использовать команду SFTP для передачи файлов Linux
How to Use Linux SFTP Command to Transfer Files
В этом руководстве мы покажем Вам, как использовать команду Linux sftp .
SFTP (SSH File Transfer Protocol) — это защищенный файловый протокол, используемый для доступа, управления и передачи файлов по зашифрованному транспортному протоколу SSH.
По сравнению с традиционным протоколом FTP , SFTP предлагает все функции FTP, и его проще настраивать.
В отличие от того scp command , который разрешает только передачу файлов, sftp команда позволяет выполнять ряд операций с удаленными файлами и возобновлять передачу файлов.
Прежде чем вы начнете
Чтобы иметь возможность передавать и управлять файлами через SFTP, вы должны иметь разрешение на запись в удаленной системе.
При передаче больших файлов рекомендуется запускать команду sftp внутри сеанса экрана или tmux .
Каталог, из которого вы запускаете sftp команду, является локальным рабочим каталогом.
Установление SFTP-соединения
SFTP работает по модели клиент-сервер. Это подсистема SSH и поддерживает все механизмы аутентификации SSH.
Хотя традиционная аутентификация по паролю настроена по умолчанию и более проста в использовании, если вы регулярно подключаетесь к своему серверу через SSH / SFTP, рекомендуется создать ключи SSH и настроить логин SFTP без пароля .
Чтобы открыть SFTP-соединение с удаленной системой, используйте sftp команду, за которой следует имя пользователя удаленного сервера и IP-адрес или имя домена:
Если вы подключаетесь к хосту с использованием аутентификации по паролю, вам будет предложено ввести пароль пользователя.
После подключения вам будет предложено sftp приглашение и вы сможете начать взаимодействие с удаленным компьютером:
Если удаленный сервер SSH не прослушивает порт по умолчанию 22, используйте -oPort параметр, чтобы указать альтернативный порт:
Команды SFTP
Большинство команд SFTP похожи или идентичны командам, которые вы используете в командной строке Linux.
Вы можете получить список всех доступных команд SFTP, набрав help или ? .
Навигация по SFTP
Когда вы вошли на удаленный сервер, текущим рабочим каталогом является домашний каталог удаленного пользователя. Вы можете проверить это, набрав:
Для просмотра списка файлов и каталогов используйте ls команду:
Чтобы перейти в другой каталог, используйте cd команду. Например, чтобы перейти в /tmp каталог, вы должны набрать:
Вышеуказанные команды используются для навигации и работы в удаленном местоположении.
sftp Оболочка также предоставляет команды для местной навигации, информации и управления файлами. Локальные команды начинаются с буквы l .
Например, чтобы напечатать локальный рабочий каталог, вы должны набрать:
Передача файлов с SFTP
С SFTP вы можете безопасно передавать файлы между двумя компьютерами.
Если вы работаете на настольном компьютере, вы можете использовать SFTP-клиент с графическим интерфейсом, например WinSCP или FileZilla, для подключения к удаленному серверу и загрузки или загрузки файлов.
Эта sftp команда полезна, когда вы работаете на сервере без графического интерфейса и хотите передавать файлы или выполнять другие операции с удаленными файлами.
Загрузка файлов с помощью команды SFTP
После входа на удаленный сервер текущим рабочим каталогом является домашний каталог удаленного пользователя.
При загрузке файлов с помощью sftp команды они загружаются в каталог, из которого вы ввели sftp команду.
Чтобы загрузить один файл с удаленного сервера, используйте get команду:
Вывод должен выглядеть примерно так:
Если вы хотите сохранить загруженный файл под другим именем, укажите новое имя в качестве второго аргумента:
Чтобы загрузить каталог из удаленной системы, используйте рекурсивный -r параметр:
Если передача файла не удалась или была прервана, вы можете возобновить ее, используя reget команду.
Синтаксис reget такой же, как и синтаксис get :
Загрузка файлов с помощью команды SFTP
Чтобы загрузить файл с локального компьютера на удаленный SFTP-сервер, используйте put команду:
Вывод должен выглядеть примерно так:
Если файл, который вы хотите загрузить, не находится в вашем текущем рабочем каталоге, используйте абсолютный путь к файлу.
При работе с put вами можно использовать те же параметры, которые доступны с помощью get команды.
Чтобы загрузить локальный каталог, вы должны набрать:
Чтобы возобновить прерванную загрузку:
Файловые манипуляции с SFTP
Как правило, для выполнения задач на удаленном сервере вы должны подключиться к нему через SSH и выполнять свою работу с помощью терминала оболочки. Однако в некоторых ситуациях пользователь может иметь только SFTP-доступ к удаленному серверу.
SFTP позволяет выполнять некоторые основные команды для работы с файлами. Ниже приведены некоторые примеры использования оболочки SFTP:
Получите информацию об использовании диска удаленной системы :
Создайте новый каталог на удаленном сервере:
Переименуйте файл на удаленном сервере:
Удалить файл на удаленном сервере:
Удалить каталог на удаленном сервере:
Измените права доступа к файлу в удаленной системе:
Измените владельца файла в удаленной системе:
Вы должны указать идентификатор пользователя к chown и chgrp командам.
Измените владельца группы удаленного файла с помощью:
По завершении работы закройте соединение, набрав bye или quit .
Вывод
В этом руководстве мы показали, как использовать sftp команду для загрузки и выгрузки файлов на удаленный SFTP-сервер.
Вы также можете настроить аутентификацию на основе ключей SSH и подключаться к серверам Linux без ввода пароля.
Если вы регулярно подключаетесь к одним и тем же системам, вы можете упростить рабочий процесс, определив все свои подключения в конфигурационном файле SSH .
Источник
Как запустить команду sftp с паролем из скрипта Bash?
Мне нужно перенести файл журнала на удаленный хост, используя sftp с хоста Linux. Мне предоставили учетные данные для того же от моей операционной группы. Однако, поскольку у меня нет контроля над другим хостом, я не могу генерировать и делиться ключами RSA с другим хостом.
Так есть ли способ запустить sftp команду (с указанием имени пользователя и пароля) из скрипта Bash через задание cron ?
Я нашел похожий вопрос переполнения стека: Укажите пароль для sftp в скрипте Bash , но удовлетворительного ответа на мою проблему не было.
У вас есть несколько вариантов, кроме использования аутентификации с открытым ключом:
- Используйте брелок
- Используйте sshpass (менее безопасный, но, вероятно, соответствующий вашим требованиям)
- Используйте ожидаемый (наименее защищенный и требуется больше кодирования)
Если вы решили дать sshpass шанс, вот рабочий фрагмент скрипта для этого:
Другой способ — использовать lftp:
Недостаток этого метода заключается в том, что другие пользователи на компьютере могут читать пароль из подобных инструментов, ps и этот пароль может стать частью истории вашей оболочки.
Более безопасная альтернатива, доступная с LFTP 4.5.0, — установка LFTP_PASSWORD переменной среды и выполнение lftp с помощью —env-password . Вот полный пример:
LFTP также включает в себя классную функцию зеркалирования (может включать удаление после подтвержденной передачи —Remove-source-files ):
Expect — отличная программа для использования.
В Ubuntu установите его с помощью:
На компьютере CentOS установите его с:
Допустим, вы хотите подключиться к серверу sftp, а затем загрузить локальный файл с локального компьютера на удаленный сервер sftp.
Это открывает sftp-соединение с вашим паролем к серверу.
Затем он переходит в каталог, куда вы хотите загрузить свой файл, в данном случае «logdirectory»
Источник