Как я скрестил WinSCP, Puttygen и CMD на старой винде
Всем привет. Недавно прилетела неожиданная задача: Организовать скриптом sftp-обмен по со старых версий винды с аутентификацией по ключам.
С 10+ все понятно. Там и ssh и sftp из коробки есть настройка от linux вообще не отличается. А вот со старыми - проблема.
читать первым в телеграм читать первым в макс
Почему до сих пор используются старые версии? Да потому что работают. А выставлять их наружу никто не собирается. Так что пока работает будет работать. Ну, я отвлекся.
Итак sftp. Я нашел две программы psftp (из комплекта putty) и winscp.
Вот ее и будем настраивать.
Генерим ключ без парольной фразы с помощью puttygen (из комплекта putty). Желательно выбрать EdDSA(Ed25519(255 bits). Он маленький, и с ним удобно работать. Сохраняем публичный ключ в формате *.ppk .
Для того, чтобы публичный ключ нормально читался его нужно привести к однострочному виду:
ssh-ed25519 AAAAC3....8cJiPqx0VAOmEI+yy user@host
Я редактировал прямо в vim.
После этого вставляем ключ в authorized_keys на серваке.
Запускаем winscp.exe и в настройках → хранилище меняем реестр на ini файл. Это нужно сделать, чтобы скрипт работал и от другого пользователя.
В WinSCP.exe создать подключение например «servername» указав ключ. В подключении можно и начальный каталог указать сразу.
Обязательно протестировать соединение приняв fingerprint.
Создать скрипт обмена script.sftp типа:
open servername
put filename
get filename1
bye
- Запуск скрипта обмена:
C:\prog\WinSCP\winscp.com /ini=C:\prog\WinSCP\WinSCP.ini /logsize=2*100K /script=C:\prog\WinSCP\script.sftp /log="C:\prog\WinSCP\script.sftp.log" /console
- Иногда, Скрипт, при запуске из какой-нибудь программы типа 1c не срабатывает. Тогда строку пункта 8 проще записать в какой-нибудь
servername.batи выполнять его из программы через cmd:
c:\windows\...\cmd.exe /c C:\prog\WinSCP\servername.bat
Вот тебе и винда, такая простая задача, и столько гемора при реализации. Да, кстати, на десятке тоже работает. Проверил.
Всем работы без багов.
