Uso do PuTTY na linha de comando do Hudson

1

Estou tentando usar o PuTTY na linha de comando de um Hudson trabalho.

O comando é o seguinte:

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

Onde 'command.txt' é um script shell a ser executado no servidor através de SSH .

Se eu iniciar este comando a partir do prompt de comando do Windows, ele funcionará. O script de shell é executado na máquina do servidor.

Se eu iniciar uma compilação da tarefa do Hudson configurada com esse comando em lote, isso não funcionará. O build está rodando ... e rodando ... e rodando .. sem fazer nada, e eu tenho que pará-lo manualmente.

É possível iniciar um programa externo (ou seja, PuTTY) de um trabalho do Hudson?

PS: Eu tentei o plugin SSH, mas ... não é um plugin realmente bom (pre / post build, falha no status dos comandos lançados não capturados pelo Hudson, etc.)

Estes são os registros de compilação:

[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

E o arquivo Hudson.err.log ao mesmo tempo (depois de uma parada):

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)

Meu shell script apenas escreve "hello" em um arquivo "hello.txt" no servidor, e nada é feito.

    
por kij 03.06.2010 / 16:26

4 respostas

1

O problema é que você precisa aceitar a chave com o nome de usuário com o qual o Hudson é executado. Portanto, no caso de você não executar o Hudson com a conta do sistema local (o que é uma má idéia, de qualquer forma), faça login com a conta do Hudson e aceite a chave. Então sua construção Hudson funcionará.

Se o Hudson estiver sendo executado com a conta do sistema local, poderá haver uma opção, mas não tenho certeza se isso funcionará ou não. Primeiro, você precisa permitir que o serviço Hudson interaja com a área de trabalho. Então você entra no seu servidor como administrador. Não tenho certeza se você precisa estar fisicamente na caixa. Inicie o Plink ou o PuTTY e espere que um pop-up apareça, então você pode aceitar a chave e tudo deve funcionar bem.

Outra opção seria lançar o Plink com o comando runas e fornecer suas credenciais de usuário (diferentes).

Outra opção é: obter Plink da Quest e usar a opção -auto_store_key_in_cache .

    
por 04.06.2010 / 14:44
1

PuTTY cria uma janela. Provavelmente é por isso que está pendurado no Hudson (que não tem acesso ao sistema de janelas). Plink é provavelmente uma aposta melhor. No entanto, com minha instalação do PuTTY (0,60), as opções de linha de comando do Plink estão completamente quebradas. Não consegui entrar em um servidor diferente dos meus padrões do PuTTY.

Em teoria, você poderia configurar uma sessão do PuTTY e usá-la com o Plink (via -load ). No entanto, você terá o problema de obter sua sessão configurada em qualquer usuário que o Hudson esteja executando.

    
por 03.06.2010 / 19:33
1

Como Peter Schuetze apontou, você tem que aceitar a chave com o nome de usuário com o qual corre o Hudson. Minha solução para isso, usando apenas o putty padrão e o plink, é esta:

  1. Configure uma sessão usando os detalhes de conexão que você precisa com o putty e salve-a
  2. conecte uma vez, aceitando a chave
  3. Com o regedit, exporte completamente [HKEY_CURRENT_USER \ Software \ SimonTatham]
  4. Substitua "HKEY_CURRENT_USER" por "HKEY_USERS \ S-1-5-18", que é o identificador de segurança da conta do Sistema Local
  5. Salve o arquivo .reg e importe-o clicando duas vezes em

Ao fazer isso, você agora tem a chave do host aceita E todas as configurações para a sessão disponíveis ao fazer conexões plink com a conta do sistema local.

É útil especialmente quando você também define um arquivo de chave privada que não é protegido por senha para essa sessão.

    
por 03.12.2013 / 10:15
0

Minha maneira favorita de entrar no contexto de outra máquina é criar um escravo na máquina de destino e executar os scripts. Eu uso isso extensivamente para contornar o armazenamento de senhas não criptografadas em discos rígidos. Dê uma olhada na documentação do hudson sobre como fazer isso.

    
por 08.06.2010 / 22:45

Tags