К сожалению, в связи с отсутствием Windows проверить всё это я уже не могу, пишу по памяти.
Вкратце:
- Устанавливаем ssh клиент — putty
- Создаём ключи
- Добавляем pageant в автозагрузку и запускаем
- Создаём командный файл для обновления сервера и запускаем
SSH клиент
В Windows основной SSH клиент — putty. В комплект входит:
- putty.exe — собственно клиент, в котором можно работать как в обычном ssh терминале, аналог ssh в unix
- plink.exe — command-line ssh клиент, аналог ssh в unix
- pageant.exe — программа кэширования приватных ключей в памяти, аналог ssh-add в unix
- puttygen.exe — генератор ключей, аналог ssh-keygen в unix
- pscp.exe — клиентская программа протокола SCP, аналог scp в unix
- psftp.exe — клиентская программа протокола SFTP, аналог sftp в unix
Совсем сначала надо прочитать документацию, но так как делать это никто не будет, опишу по шагам вкратце весь процесс.
Сначала устанавливаем сам putty — http://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html. Я бы установил в c:\putty , так как потом это имя придётся использовать в командных файлах и оно желательно должно быть простым.
Потом создаём приватный/публичный ключ с помощью puttygen.exe. Процесс описан в https://the.earth.li/~sgtatham/putty/0.68/htmldoc/Chapter8.html#pubkey , обратить внимание надо на восемь моментов.
- Приватный ключ всегда должен создаваться с паролем. Сложным. НЕ qwertasdg1234
- Приватный ключ всегда должен создаваться с паролем. Сложным. НЕ йцукфыва1234
- Приватный ключ всегда должен создаваться с паролем. Сложным. НЕ 12345678
- Приватный ключ всегда должен создаваться с паролем. Сложным. НЕ ‘ ‘
- Приватный ключ всегда должен создаваться с паролем. Сложным. НЕ passw0rd
- Сохранять приватный/публичный ключ надо в директории, защищённой от всех кроме его владельца, и никогда не передавать никому приватный ключ (*.ppk) .
- Современные дистрибутивы Linux требуют ключ RSA 2048 бит (или больше), но НЕ 1024 бита. Ключ 1024 бита работать на сервере не будет.
- Для передачи на linux сервер и записи в файл ~/.ssh/authorized_keys публичный ключ должен быть сохранён в однострочном формате — он есть в текстовом поле puttygen, но не сохраняется автоматически, его надо вручную сохранить в той же директории что и публичный/приватный ключи, но с каким-то отличным от .ppk или .pub расширением. Пример такого ключа:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDO6FE+ejtICTMH8V1wtbHffP0A1NUV2JF8QB5iSyo9mLdrYofbiFtXpVUV9XuUe0pXNEUpHWWqFNd+AKl6fXOU2NiA3IgZ4dZ4/u/ii1GwhIqMPhaN9NlmXDKtfcvPPxPLBoJhijWxDurstPtSZacHlxptRPjP2iYDa7eyIzUU66KO68pCLL5fh0ccVWwY/173gRbR0svJJejo6j0/TCRidsUwJm6NHv0q9gUfRINvfFGEJZL0EKhcqUyk6iqK0o8Q8zOUShtYZryJGhnTqaTZ95OnzF7pDDXkIyaHcu/Huukjx6oQHkR3GHhtUt6ijl/tpGAf071aUJStJlY2FGWn test@test.host
test@test.host — имя, идентифицирующее происхождение ключа. Желательно указывать имя пользователя и сервер, с которого пришёл ключ. Напоминаю, что это ОДНА строка, без переноса слов и букв. Из стандартного для putty формата такой формат может быть создан без проблем в любом редакторе. Администратор Linux сервера примет и стандартный для putty формат и сам всё изменит, но Вы будете занесены в категорию подозрительных личностей, от которых можно ожидать любой пакости 🙂
pageant
pageant сохраняет в памяти загруженные приватные ключи и выдаёт их клиентам ssh без запроса пароля. Это крайне удобно. Запускать pageant надо от имени пользователя с административными правами. Проще всего создать командный файл, в который записать вызов pageant и указать список ключей, которые он должен загрузить.
c:\putty\pageant.exe c:\putty\user.ppk
Этот командный файл добавить в автозагрузку и не забыть отметить флажок «запускать с административными правами»
Копирование файлов
Для копирования достаточно pscp.exe , но в большинстве случаев лучший результат даёт использование rsync.exe — он умеет делать инкрементальное копирование, то есть передаёт только изменившиеся части файлов. С rsync под windows есть некоторая проблема совместимости, описанная ниже.
Создаём файл update.bat с содержимым:
c:\putty\pscp.exe -r c:\project\release\ user@host:/home/user/project/release
Запуск этого файла решит все проблемы обновления. Кроме одной. В windows/unix разные понятия о том какой файл надо считать выполнимым, поэтому некоторым файлам придётся установить дополнительные права, для этого в фомандный файл надо добавить несколько строк, например
c:\putty\pscp.exe -r c:\project\release\ user@host:/home/user/project/release
REM права читать ВСЕМ директорию и файлы
c:\putty\plink.exe user@host chmod -R ugoa+rX /home/user/project/release
REM права запускать ВСЕМ отдельный файл
c:\putty\plink.exe user@host chmod -R 755 /home/user/project/release/file.sh
Вопрос с правами сложный и его надо тщательно продумывать, особенно права на файлы, которые лишним процессам доступны быть не должны (пароли всякие).
rsync
rsync — программа синхронизации файлов, в частности между локальной файловой системой и сервером. Особенности — синхронизация инкрементальная, то есть копируются только изменённые части файлов. Для архивов это не очень актуально, кроме архивов gzip созданных с опцией —rsyncable, но в большинстве случаев всё равно удобнее чем scp — например, можно указать файлы или директории, которые не надо синхронизировать, можно удалять лишние файлы и так далее.
С какой-то версии putty или cygwin у rsync+pageant начались проблемы совместимости. Несколько лет назад этот вопрос был актуален, как сейчас не знаю. Во всяком случае есть инструкция как обойти проблему.
Предыдущий скрипт, в варианте rsync, будет выглядеть так:
c:\putty\rsync.exe --progress -avz /cygdrive/c/project/release user@host:/home/user/project
или
c:\putty\rsync.exe --progress -avz /cygdrive/c/project/release/* user@host:/home/user/project/other-release-dir/
rsync — программа из комплекта cygwin, поэтому пути в windows преобразуются в unix-like вид типа /cygdrive/c/project/release/ . Конечно, можно указывать и относительные пути, только не забывать менять ‘\’ на ‘/’ .
Leave a Reply
You must be logged in to post a comment.