Использование PuTTY в командной строке от Hudson

9231
kij

Я пытаюсь использовать PuTTY в командной строке из задания Хадсона .

Команда следующая:

putty -ssh -2 -P 22 USERNAME@SERVER_ADDR -pw PASS -m command.txt 

Где 'command.txt' - это сценарий оболочки, который выполняется на сервере через SSH .

Если я запускаю эту команду из командной строки Windows, она работает. Сценарий оболочки выполняется на сервере.

Если я запускаю сборку задания Hudson, настроенную с помощью этой пакетной команды, она не работает. Сборка запущена ... и работает ... и работает .. ничего не делая, и я должен остановить это вручную.

Можно ли запустить внешнюю программу (то есть PuTTY) из задания Hudson?

PS: я попробовал плагин SSH, но ... не очень хороший плагин (сборка до / после, состояние сбоя команд, запущенных не пойманными Хадсоном и т. Д.)

Это журналы сборки:

[workspace] $ cmd /c call C:\WINDOWS\TEMP\hudson7429256014041663539.bat  C:\Hudson\jobs\Artifact deployer\workspace>putty -ssh -2 -P 22 USER@SERV_ADD -pw PASS -m com.txt  Le build a été annulé Finished: ABORTED 

И файл Hudson.err.log одновременно (после остановки):

3 juin 2010 18:27:28 hudson.model.Run run INFO: Artifact deployer #6 aborted java.lang.InterruptedException at java.lang.ProcessImpl.waitFor(Native Method) at hudson.Proc$LocalProc.join(Proc.java:179) at hudson.Launcher$ProcStarter.join(Launcher.java:278) at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:83) at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:58) at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19) at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:601) at hudson.model.Build$RunnerImpl.build(Build.java:174) at hudson.model.Build$RunnerImpl.doRun(Build.java:138) at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:416) at hudson.model.Run.run(Run.java:1241) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46) at hudson.model.ResourceController.execute(ResourceController.java:88) at hudson.model.Executor.run(Executor.java:124) 

Мой сценарий оболочки пишет «hello» только в файле «hello.txt» на сервере, и ничего не делается.

1
Что говорит ваш лог-файл Hudson, когда сборка запущена и работает? Кроме того, что-нибудь напечатано в журнале сборки? Возможно, вы захотите добавить некоторые записи в ваш command.txt, чтобы увидеть, начинает ли он выполняться или нет. 13 лет назад 0
Я обновил свой оригинальный пост с журналами. ps: USER, PASS & SERV_ADD - заменяемые значения. 13 лет назад 0

4 ответа на вопрос

1
Dave Bacher

PuTTY создает окно. Наверное, поэтому он зависает от Хадсона (у которого нет доступа к оконной системе). Плинк, наверное, лучшая ставка. Однако с моей установкой PuTTY (0.60) параметры командной строки Plink полностью не работают. Я не мог войти на сервер, кроме как с моими настройками PuTTY по умолчанию.

Теоретически, вы можете установить сеанс PuTTY и использовать его с Plink (через -load). Тем не менее, у вас будет проблема с тем, чтобы ваш сконфигурированный сеанс работал с тем пользователем, от имени которого работает Hudson.

Plink отлично работает из моей командной строки. Но от Гудзона он просит принять ключ для регистрации в реестре. (поскольку это первое подключение к серверу от Hudson) Я попытался сначала подключиться вручную, чтобы зарегистрировать ключ ... но он не задал мне этот вопрос (из putty или plink). Что я должен делать ? ps: опция -load не работает с моими настроенными сессиями. ps2: командная строка выполнена = plink -ssh СЕРВЕР -l ПОЛЬЗОВАТЕЛЬ -pw PASS -m SCRIPT kij 13 лет назад 0
Я очищаю сеанс замазки, а затем снова подключаюсь к моему серверу. Он попросил меня сохранить ключ в кеше, я согласился. Затем я запускаю сборку моей работы в hudson, но снова, то же самое сообщение, чтобы принять ключ ... Так что я думаю, что из hudson, сессия putty не работает как попытка (то же самое неправильное поведение, чем опция -load plink) Есть ли другие методы для подключиться к другому компьютеру из Гудзона и выполнить сценарии оболочки? kij 13 лет назад 0
1
Peter Schuetze

Проблема в том, что вам нужно принять ключ с именем пользователя, с которым вы запускаете Hudson. Поэтому, если вы не запускаете Hudson с локальной системной учетной записью (что в любом случае является плохой идеей), вам необходимо войти в систему с учетной записью Hudson и принять ключ. Тогда ваша сборка Hudson будет работать.

Если Hudson работает с локальной системной учетной записью, возможно, есть вариант, но я не уверен, будет ли он работать или нет. Во-первых, вы должны разрешить службе Hudson взаимодействовать с рабочим столом. Затем вы входите на свой сервер как администратор. Я не уверен, если вам нужно быть физически на коробке. Запустите Plink или PuTTY и надейтесь, что появится всплывающее окно, затем вы можете принять ключ, и все должно работать нормально.

Другой вариант - запустить Plink с помощью команды runas и указать свои (разные) учетные данные пользователя.

Другой вариант: получите Quest's Plink и используйте опцию -auto_store_key_in_cache.

Хорошо, Хадсон работает с локальной системой. Я проверил вариант работы с рабочим столом, но безуспешно. Фактически, я использую имя пользователя A для входа на локальный компьютер и имя пользователя B для входа на сервер (через putty или plink). Итак, проблема в том, что эти два разных имени пользователя? Поскольку серверный компьютер не мой (клиентский), я не могу изменить свою учетную запись. Самме вещь о моем локальном аккаунте. Я попытаюсь запустить сервер Hudson с моим именем пользователя (и паролем), но я боюсь, что это приведет к другим видам ошибок. В любом случае, спасибо за ваш ответ. kij 13 лет назад 0
Как я и опасался, использование моей учетной записи на сервере для запуска Hudson не сработало, так как это посещение неизвестно в локальной сети. Итак, что касается первого «решения», если hudson работает с локальной системой и активирована опция «взаимодействовать с рабочим столом», даже если я очищаю все свои сеансовые ключи и регистрируюсь на сервере вручную (и принимаю ключ для в первый раз), то задание hudson по-прежнему не может получить доступ к серверу без сообщения о принятии ключа: / kij 13 лет назад 0
Следующие предпосылки. Сначала вы сами должны быть администратором. Во-вторых, вы должны использовать удаленное программное обеспечение, такое как VNC, так как они выглядят для Windows как локальный логин, а не как сеанс сервера терминалов. Следуя процедуре, войдите на сервер. После этого запустите Hudson и посмотрите, появится ли всплывающее окно. Если нет, создайте тестовое задание с использованием putty вместо plink и посмотрите, появится ли всплывающее окно. Кстати, вы также можете спросить администратора клиента, могут ли они локально войти на сервер и принять ключ. Peter Schuetze 13 лет назад 0
Привет, Питер, я скачал и использую квестовый вариант с опцией -auto_store_key_in_cache, и я работаю. Еще раз спасибо за вашу помощь (и, конечно, Дейв :)) kij 13 лет назад 0
Что именно вы сделали с plink? Просто запустить? tim 13 лет назад 0
plink - версия putty для командной строки Обычно используется для сценариев. Peter Schuetze 13 лет назад 0
1
tdl

Как отметил Питер Шютце, вы должны принять ключ с именем пользователя, с которым вы запускаете Hudson. Мое решение для этого, просто используя стандартные putty и plink, заключается в следующем:

  1. Настройте сессию, используя необходимые данные соединения, с помощью putty и сохраните его
  2. подключиться один раз, принимая ключ
  3. С помощью regedit полностью экспортируйте [HKEY_CURRENT_USER \ Software \ SimonTatham]
  4. Замените «HKEY_CURRENT_USER» на «HKEY_USERS \ S-1-5-18», который является идентификатором безопасности для учетной записи локальной системы
  5. Сохраните файл .reg и импортируйте его, дважды щелкнув

Таким образом, теперь у вас есть принятый ключ хоста И все настройки для сеанса, доступные при выполнении соединений plink с локальной системной учетной записью.

Это особенно удобно, когда вы также устанавливаете файл с закрытым ключом, который не защищен паролем для этого сеанса.

0
Peter Schuetze

Мой любимый способ попасть в контекст другой машины - создать подчиненное устройство на целевой машине и запустить сценарии. Я широко использую это для хранения незашифрованных паролей на жестких дисках. Посмотрите документацию Hudson о том, как это сделать.

Я уже думаю об этом (лучшее, что я думаю), но у меня нет прав на установку рабов Hudson на сервер. Я только что видел ваш EDIT в предыдущем посте, завтра я проверю опцию автоматического принятия ключа авторизации, мне нужно скачать новую версию plink, поскольку у меня всего 0,60 (0,60_q1 ... требуется для этой опции) Спасибо снова за вашу помощь. kij 13 лет назад 0