Permissions Issue? Putty + Plink + Concurso + Powershell + Tarefa Agendada

3

Antecedentes

Eu tenho os seguintes componentes:

  • Uma caixa do Windows Server 2008 R2
  • Uma conta de administrador (minha)
  • Uma conta de serviço no domínio que é um administrador da caixa
  • Uma instalação de Putty (incluindo plink para linha de comando e Pageant como a geração de chave pública ssh)
  • Um arquivo de texto para comandos a serem usados durante uma sessão SSH
  • Um script powershell que executa o plink, que usa Start-Process para invocar o plink com linhas de comando que o instruem a usar o Ageant para a conexão do PuTTy e o commands.txt para o comando.
  • Uma tarefa agendada que é executada como minha conta de usuário

O objetivo

Eventualmente, para que a tarefa agendada seja executada como uma conta de serviço, que chama o powershell de conta de serviço, que executa o processo e executa os comandos ssh.

O problema

  • Quando executo esse script em um prompt de comando do powershell como minha conta de usuário, ele é executado.
  • Quando executo esse script a partir de uma tarefa agendada como minha conta de usuário, com as permissões mais altas, e digo para salvar minhas credenciais, ele "não é executado".
  • Por "não executado", significa que parece gerar uma instância de plink.exe, que é onde eu acho que o problema está ocorrendo (algo pendente que não consigo ver no console).

Perguntas

  • Alguém tem uma solução geral que é um pouco mais elegante, mas usa as mesmas ferramentas ou similares?
  • O meu script powershell deve invocar o cmd.exe para que eu possa capturar o stdout no meu arquivo de log, pelo menos?

O script

Caso isso ajude:

#Starts the vcenter2 server.
#if the server is already started, it will tell you so.

#Stop an error from occurring when a transcript is already stopped
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null

#Reset the error level before starting the transcript
$ErrorActionPreference="Continue"
Start-Transcript -path C:\Scripts\logs\StartTheVCenter2Server.log -append

#Run plink and reference the commands file to start up the server
Start-Process "C:\Program Files (x86)\PuTTY\plink.exe" -Argumentlist "-agent -m C:\Scripts\idrac_powerup_commands.txt root@[servernameredacted]" -wait -RedirectStandardOutput "C:\Scripts\logs\plinklog.log"

#Clean-up
Stop-Transcript

Pensamentos? Provavelmente vou brincar com o Invoke-Command para ver se consigo redirecionar a saída para o meu log pelo menos.

Obrigado!

    
por SeanKilleen 07.02.2013 / 21:28

3 respostas

4

A causa geral para plink.exe "suspensão" que vi são solicitações para adicionar a chave do host ao registro. Eu acho que a chave do host já está no seu registro, no entanto. Eu adicionaria o argumento -batch a plink e verificaria se você obtém uma falha fora da direita versus um travamento. Isso deve começar pelo caminho certo, pelo menos.

    
por 07.02.2013 / 21:45
0

Sua chamada Plink está usando -agent (pageant) para autenticação, mas você não iniciou o serviço explicitamente, então esse pode ser o problema, exporte seus dados privados chave para uma senha menos arquivo de chave e referenciá-lo diretamente com um argumento -i (identidade), para ver se é a autenticação que está em falta. Além disso, adicione temporariamente uma opção -v (verbose) e verifique o log de eventos depois.

    
por 07.02.2013 / 22:04
0

Para o que vale a pena, eu tive um problema muito semelhante - psftp não funcionaria em um script que foi agendado no windows 7 para executar se o usuário estava logado ou não. No meu caso, eu estava usando uma sessão salva pageant referenciada na linha de comando; e como o concurso não está sendo executado no mesmo contexto da tarefa agendada, ele seria interrompido. Eu resolvi o problema usando o sinalizador -i no psftp e referenciando a localização da chave privada no próprio script.

    
por 18.07.2013 / 19:12