Como posso automatizar puxar arquivos via psftp da massa?

1

Eu tenho uma caixa do Windows Server 2003 e está usando psftp para se conectar a uma máquina Linux remota e fazer o download de arquivos a cada hora.

Eu tenho dois desafios principais com esta máquina:

Primeiro

As tarefas agendadas estão atualmente configuradas para serem executadas como um usuário nesta caixa, o que eu acredito que exija que armazene a senha do usuário no agendador de tarefas. No entanto, quando a senha do usuário muda, a tarefa não é executada. Eu gostaria de ter essa tarefa sempre executada independentemente.

  • Acredito que a solução para o primeiro problema é que a tarefa agendada seja executada como SYSTEM . Isso está correto? Se sim, como faço para configurar isso? Basta digitar SYSTEM na caixa "Executar como"? E eu preciso definir uma senha para SYSTEM porque acredito que tentei sem senha e ele disse que o trabalho não foi executado porque a senha estava incorreta. Talvez eu esteja fazendo isso errado.

Segundo

O Putty exige que a chave remota de um servidor seja armazenada no registro para verificar a autenticidade do servidor. No entanto, isso parece ser armazenado por usuário e, portanto, se eu alternar o script para ser executado como um usuário diferente, parece que o usuário deve executar o script interativamente na primeira vez, para que a chave seja armazenada no registro.

  • As instruções no site da putty mencionam que as chaves devem ser adicionadas ao seguinte local do registro:

    HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
    

Mas, a julgar por "HKEY_CURRENT_USER", não acho que seja para o usuário SYSTEM . Se eu configurar essa tarefa para ser executada como SYSTEM , como posso ter certeza de que a chave apropriada está armazenada no registro do host? Eu não me importo de adicioná-lo manualmente (há um script perl para converter um arquivo known_hosts), mas para onde ele deveria ir?

ps: myscript.bat apenas usa psftp.exe para extrair arquivos de um servidor remoto. Nada especial. Não há sinalizador para ignorar a verificação de hosts autorizados, e as pessoas no putty mencionam que isso seria uma má ideia de qualquer forma.

    
por cwd 06.12.2011 / 18:45

5 respostas

2

Eu percebo que já existe uma resposta aceita para essa pergunta, mas achei que lançaria a resposta para onde a seção de registro do usuário da conta SYSTEM está localizada. Na verdade, é em HKEY_USERS\.DEFAULT que a maioria das pessoas assume incorretamente que é a seção de usuário padrão para contas recém-criadas. Mais informações sobre a história e o histórico da chave estão no blog MSDN de Raymond Chen aqui:

O usuário .Default não é o usuário padrão

    
por 06.12.2011 / 20:28
4

I believe the solution to the first problem is to have the scheduled task run as SYSTEM. Is that correct?

Geralmente, você só deve executar algo como SYSTEM se realmente precisar desse nível absoluto de privilégios. Uma escolha muito melhor pode ser configurar uma conta de serviço apenas para essa tarefa. Em seguida, você pode querer desabilitar a expiração da senha da conta ou configurar uma programação de notificação para lembrá-lo de atualizar a senha da conta de serviço & detalhes da tarefa.

Você pode, é claro, fazer login temporariamente nesta conta de serviço para aceitar a chave SSH pela primeira vez.

    
por 06.12.2011 / 19:02
3

Use pscp.exe -batch -load PROFILE na linha de comando. Configure um perfil para sua conexão usando um par de chaves ssh para esse perfil e, em seguida, use esse perfil.

A conta de usuário que você usa para isso deve ser local, mas não requer nenhum privilégio especial (apenas leia a chave e escreva para os arquivos).

Teste pscp -h para todas as opções de comando.

    
por 06.12.2011 / 22:11
0

Eu não usaria o sistema assim. Eu acabei de criar um novo usuário chamado puttyservice, configurá-lo para nunca expirar, e você vai. Obviamente, você usaria esse novo perfil de usuários.

Eu também consideraria a instalação de uma solução mais robusta, como o Cygwin , e usaria a versão OpenSSH do ssh, em vez do putty. Essa é a versão padrão em todos os sistemas Linux e pode ser mais robusta e mais fácil de trabalhar do que a massa. É claro que você perde a GUI, mas isso não deve importar em termos de script.

    
por 06.12.2011 / 21:14
0

Eu sei que este é um post antigo, mas estou colocando esta resposta aqui para ajudar outros usuários com o mesmo problema.

A suíte putty de utilitários (plink, pscp, psftp, etc.) tem uma opção -hostkey. Isso permite que você inclua o hostkey do servidor de destino sem ter que passar pelo problema de copiar regkeys para outras contas (como SYSTEM).

pscp.exe /? mostrará a sintaxe correta.

-hostkey xx: xx: xx: xx: xx: x x: x x: x x: x x: x x: x x: x x: x x: x x: x x: x x

Você pode obter o hostkey iniciando uma sessão de putty com o servidor de destino uma vez sob uma conta de usuário comum.

Na linha de comando, será algo parecido com isto:

The server's rsa2 key fingerprint is:
ssh-rsa 2048 7b:e5:6f:a7:f4:f9:81:62:5c:e3:1f:bf:8b:57:6c:5a

uso:

pscp.exe -hostkey 7b:e5:6f:a7:f4:f9:81:62:5c:e3:1f:bf:8b:57:6c:5a -batch -i your-private-key.ppk C:\source.file [email protected]:/var/www/html/

Isso funciona quando executado como uma tarefa agendada em execução como conta SYSTEM.

Espero que isso seja útil para alguém.

    
por 08.03.2017 / 03:10