Я настраиваю автоматическое развертывание приложений в среде Windows из непрерывной интеграции (агенты сборки TeamCity) и использую cygwin + openssh для выполнения части удаленного выполнения - в основном я использую capistrano ruby с кучей настраиваемых задачи.
Поскольку build-agent работает на коробке как служба Windows, он не имеет заголовка. Поле не находится рядом с пользователем, вошедшим в систему, поэтому у пользователя нет возможности ввести ключевую фразу, когда (например) в противном случае может быть загружена цепочка для ключей или конкурс.
Итак, в настоящее время кодовая фраза жестко запрограммирована в сценарии развертывания - я имею в виду, в одном месте, поэтому она не разбросана повсюду, но тем не менее, похоже, что должен быть более безопасный способ сделать это.
Кто-нибудь может сказать мне, что это такое? :-)
Обновить:
SSH в среде Windows - необычный вариант. Большинство людей использовали бы WMI для развертывания приложений и управления удаленными системами. Jenkins-CI (ранее Hudson-CI) отлично использует WMI для этой цели, так что поищите там примеры.
Но вы используете SSH, поэтому я рекомендую вам генерировать ключи SSH без паролей.
Будет труднее найти или угадать (незашифрованные) ключи SSH по сравнению с кражей или угадыванием обычного пароля.
Объедините незашифрованный SSH с ограничениями IP и мониторингом журналов, чтобы вы сразу узнали, украл ли кто-то ключ и попытался войти в систему с другого хоста, используя украденный ключ.
Если вы еще этого не сделали: рассмотрите вариант, позволяющий вашим дорогостоящим хостам подключаться к узлам вашего приложения, а не наоборот.
Если ваши (открытые?) Узлы подключаются через SSH к центральному серверу для обновлений приложений, рассмотрите возможность использования ForcedCommand и ChrootDirectory, чтобы ограничить объем данных, доступных злоумышленнику, который пытается использовать узел приложения для атаки на ваш золотой хост.