1

Я пытаюсь использовать 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» на сервере, и ничего не делается.

4 ответа4

1

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

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

1

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

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

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

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

1

Как отметил Питер Шютце, вы должны принять ключ с именем пользователя, с которым вы запускаете 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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .