ServerAdmin.ru
31K subscribers
569 photos
46 videos
22 files
2.82K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru

Регистрация в РКН: https://vk.cc/cG1Urj
Download Telegram
Для подключения по SFTP, SCP или S3 в Windows я использую бесплатную программу WinSCP. Не раз об этом упоминал в разных заметках. Эта программа умеет работать в консольном режиме, плюс поддерживает выполнение команд, переданных через отдельный файл. То есть она поддерживает автоматизацию с использованием простого и интуитивного скриптового языка.

Покажу на простом и наглядном примере передачу файла с Linux машины по SSH на Windows, используя WinSCP и скрипт. Команду на копирование файла мы будем запускать с Windows. У WinSCP есть портабельная версия, так что можно просто скачать и распаковать в какую-нибудь директорию. Оттуда запускать в консольном режиме.

Нам понадобится публичный ключ, с помощью которого мы будем проходить аутентификацию на удалённом сервере, скрипт с набором команд для выполнения после подключения и сам файл, который будем передавать. Сразу уточню, что WinSCP не принимает публичные ключи, сформированные с помощью ssh-keygen. Ключ нужно будет сделать в формате PuTTY, с помощью PuTTYgen. Не понимаю, почему у putty свой формат ключей. Всегда это доставляло только неудобства.

Содержимое скрипта для получения файла с удалённого сервера:

# Подключаемся
open scp://root@10.20.1.36/ -privatekey=id_rsa -hostkey="ssh-ed25519 255 s/YHwFuEH3Lq9dGYnBfuELZYkAw4T5umNOPPPFUPCpY"
# Переходим в директорию
cd /home/zerox
# Качаем файл
get testfile.txt "C:\Users\Zerox\Documents\tmp\"
# Отключаемся и выходим
close
exit

Для того, чтобы быстро узнать hostkey, можно запустить без него. Тогда в консоли увидите ошибку, что ключ указанного сервера не добавлен. Копируете его и добавляете.

Запускаем winscp с этим скриптом так:

>winscp.com /ini=nul /script=script.txt

Есть testfile.txt уже есть, он будет перезаписан без лишних вопросов и уведомлений. Подобным образом можно очень быстро организовать необходимую автоматизацию. Например, в этом же скрипте можно скачанный файл передать на другой сервер по sftp с аутентификацией по паролю. Нужно добавить пару строк в скрипт:

open sftp://user:password@10.20.1.100/
put "C:\Users\Zerox\Documents\tmp\testfile.txt" "/mnt/backup"

На сайте WinSCP есть описание работы скриптов, список команд и готовые примеры:

◽️Общее описание скриптов и автоматизации
◽️Команды
◽️Примеры скриптов

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

get -latest /home/user/* c:\downloaded\

Я на баше подобное писал, там сильно сложнее. Надо было подключиться по ssh, там выполнить команду с find с параметрами поиска, вывод результата передать в scp. Делал тут когда-то заметку об этом.

Так выглядит проверка существования файла с помощью bat и winscp:

@echo off
set REMOTE_PATH=/home/user/test.txt
winscp.com /command "open mysession" "stat %REMOTE_PATH%" "exit"
if %ERRORLEVEL% neq 0 goto error
echo File %REMOTE_PATH% exists
rem Do something
exit /b 0
:error
echo Error or file %REMOTE_PATH% not exists
exit /b 1

Все действия можно логировать с помощью ключа /log=myscript.log:

> winscp.com /ini=nul /log=myscript.log /script=myscript.txt

Удобная штука, если у вас в хозяйстве есть сервера или рабочие машины с Windows. Многие вещи с WinSCP можно решить относительно просто.

#windows #scp #sftp