Configurando Node Windows no Rundeck utilizando WinRM.

Neste artigo iremos abordar a configuração de “nodes” para clientes Windows. Um Node é a representação de uma máquina cliente em um arquivo XML, tendo como objetivo disponibilizar informações de configuração para um servidor Rundeck. Através deste artigo será possível entender e realizar conexões, gerenciando atividades de forma remota e centralizada através do Rundeck em clientes Windows.

CONSIDERAÇÕES

Vamos levar em consideração que você já tenha alguma habilidade com Linux e que já possua o servidor Rundeck instalado e acessível. Caso ainda não tenha realizado a instalação, veja nosso artigo de como realizar a instalação do Rundeck antes de continuar.

1) CRIANDO PROJETO.

No Rundeck temos a possibilidade de criar projetos para organizar nossas atividades. Imaginemos então o seguinte Cenário: “Precisamos executar um script de backup remotamente em uma máquina com windows 7  chamada ‘clt01’ de nossa rede local”. Vamos então criar um novo projeto e dar seu nome de “clt01”.

OBS: Um projeto pode representar uma servidor/máquina remota como também vários servidores/máquinas, você tem liberdade para organizar da forma que desejar. Neste artigo escolhemos definir um projeto para cada servidor/máquina, podendo ele ter por sua vez vários “Jobs“, capazes de executar tarefas distintas, em paralelo, ou em horários distintos, de forma remota.

Acesse seu servidor Rundeck através do browser de qualquer máquina de sua rede e digite o Login e Senha.

OBS: O login e senha padrão de um servidor Rundeck é a palavra “admin“.


Após logar é possível visualizar a tela principal de nosso servidor Rundeck. Clique em “New Project” para criarmos nosso primeiro projeto.


Neste artigo iremos abordar somente a conexão de nodes para Windows, e não abordaremos todas as opções que são informadas na tela de configuração do novo projeto. Para este artigo basta preencher o nome e a descrição do projeto e clicar em “Create” ao final da página.

2) INSTALANDO PLUGIN WINRM NO RUNDECK.

Para que nosso servidor Rundeck realize comunicação e acessos remotos com nossa máquina Windows, precisamos instalar um plugin chamado “WinRM Executor“. Para isso, vamos fazer o download do mesmo conforme ilustrado abaixo.

wget https://github.com/rundeck-plugins/rundeck-winrm-plugin/releases/download/v1.3.3/rundeck-winrm-plugin-1.3.3.jar

Após realizar o download, mova o arquivo para o diretório “/var/lib/rundeck/libext/“, conforme ilustrado abaixo.

mv rundeck-winrm-plugin-1.3.3.jar /var/lib/rundeck/libext/

Feito isso, nosso plugin já estará instalado e em funcionamento, não é necessário reiniciar o serviço Rundeck.

3) CONFIGURANDO NODE DO CLIENTE WINDOWS.

Com nosso projeto criado, vamos realizar a configuração de nosso node Windows. Para isso, acesse seu servidor Rundeck e edite o arquivo “/var/rundeck/projects/clt01/etc/resources.xml“. Caso dentro de seu projeto não existe o arquivo “resources.xml” criado, realize a criação do mesmo. Para abrir o arquivo vamos utilizar como padrão o editor “vi“, conforme ilustrado abaixo.

vi /var/rundeck/projects/serverarqs/etc/resources.xml

Vamos editar o arquivo XML com as informações pertinentes do nosso cliente remoto. No exemplo proposto no artigo, vamos realizar a configuração do Node para o “clt01”.

<node name="clt01" node-executor="overthere-winrm" description="Rundeck server node" tags="clt01" hostname="192.168.10.22:5985" osArch="amd64" osFamily="windows" osName="Win7" osVersion="amd64" username="administrador" winrm-password-storage-path="keys/nodes/clt01.password" winrm-auth-type="kerberos" winrm-protocol="http" winrm-domain="dominando.com" winrm-kerberos-debug="false"/>

Repare que diferente dos nodes Linux, precisamos preencher alguns outros campos, os principais são:

name: Informe o nome que identificará o node.
hostname: O IP ou nome DNS resolvível.
username: Usuário local do servidor remoto.
winrm-password-storage-path: Armazenamento de senha. (Caminho Key Store).
winrm-auth-type: Tipo de autenticação utilizada pelo WinRM, “Basico” ou “Kerberos”.
winrm-protocol: Protocolo utilizado, “http” ou “https”. (Para https e necessário gerar um certificado).
winrm-domain: Domínio de sua rede local, caso utilize a autenticação kerberos.
winrm-kerberos-debug: Pode ser “True” ou “False”. Utilizado para debugar problemas.

Após realizar as alterações informadas, salve e saia do arquivo. Não é necessário realizar o restart do serviço Rundeck para que as alterações sejam aplicadas.

4) CONFIGURANDO KEY STORAGE.

Precisamos realizar a configuração do “Key Storage” de nosso projeto. Esta opção é uma forma de guardar a senha do usuário de autenticação de nossa máquina remota, sem a necessidade de passar a senha diretamente no arquivo resources.xml. Acesse o seu “projeto > configurações” e no menu lateral clique em Key Storage, conforme ilustrado abaixo.

Clique em “Add or Uploud a Key” para adicionar o tipo de Chave que deseja armazenar.

Em “Key Type” defina a opção de password, em “Enter Text” defina a senha de acesso, “Storage path” é opcional, você pode definir um nome de pasta para armazenamento da senha, e em “Name” é o nome do arquivo no qual armazenará a senha desejada. Realize o procedimento e clique no botão salvar.

5) CONFIGURANDO WINRM NO WINDOWS.

Com nosso servidor Rundeck configurado, precisamos agora configurar nossa máquina cliente. Precisamos habilitar um recurso no windows chamado WinRM.

“O WINRM (Gerenciamento Remoto do Windows) é a implementação da Microsoft do Protocolo WS-Management, um protocolo padrão amigável para firewall, baseado no protocolo SOAP, que permite que hardware e sistemas operacionais de fornecedores diferentes interajam.” (fonte: https://technet.microsoft.com/pt-br/library/dn265971(v=ws.11).aspx

Acesse o computador cliente e abra o PowerShell como adminstrador.

Agora com o PowerShell aberto, vamos aos comandos. Verifique se o serviço WinRM esta parado conforme ilustrado abaixo.

winrm g winrm/config

Vamos então configurar nosso WinRM. A primeira coisa que precisamos fazer é configurar uma porta ouvinte. Para isso, execute o comando conforme ilustrado abaixo.

winrm qc -transport:http

Após a execução do comando, o sistema percebe que o WinRM não esta configurado para receber solicitações na máquina e pergunta se deseja iniciar o serviço do WinRM, fazendo as alterações solicitadas. Infome “y” e prossiga, conforme ilustrado abaixo.

Neste momento repare que o próprio WinRM nos mostra uma informação muito importante, e que pode acabar passando despercebido.

Se você possui algum antivírus instalado no computador no qual faça o controle de firewall da máquina, lembre-se de criar uma regra de firewall, liberando o acesso as portas 5985 (http) e 5986 (https). Estas são as portas padrões utilizadas pelo WinRM. Se desejar, estas portas também podem ser alteradas, porém, neste artigo, iremos utilizar a porta 5985 padrão.

Com nosso WinRM rodando e com sua porta utilizada ativa e também seu acesso liberado no firewall local, vamos passar alguns parâmetros de configuração para o serviço WinRM.

Configure o WinRM para permitir a autenticação básica:

winrm set winrm/config/service/Auth '@{Basic="true"}'

Configure o WinRM para permitir mensagens SOAP não criptografadas:

winrm set winrm/config/service '@{AllowUnencrypted="true"}'

Configure o WinRM para fornecer memória suficiente aos comandos que você vai executar:

winrm set winrm/config/winrs '@{MaxMemoryPerShellMB="2048"}'

De forma a resolver um possível problema de conexão de código (500), alguns parâmetros também podem ser configurados.

winrm set winrm/config '@{MaxEnvelopeSizekb="4294967295"}'
winrm set winrm/config '@{MaxTimeoutms = "4294967295"}'
winrm set winrm/config '@{MaxBatchItems="4294967295"}'

winrm set winrm/config/Service '@{MaxConcurrentOperations="4294967295"}'
winrm set winrm/config/Service '@{MaxConcurrentOperationsPerUser="4294967295"}'
winrm set winrm/config/service '@{EnumerationTimeoutms ="4294967295"}'
winrm set winrm/config/service '@{MaxConnections ="50"}'
winrm set winrm/config/service '@{MaxPacketRetrievalTimeSeconds ="4294967295"}'
winrm set winrm/config/service/auth '@{CredSSP="True"}'

winrm set winrm/config/client '@{TrustedHosts="*"}'
winrm set winrm/config/client '@{NetworkDelayms="4294967295"}'

winrm set winrm/config/winrs '@{IdleTimeout ="2147483647"}'
winrm set winrm/config/winrs '@{MaxConcurrentUsers ="100"}'
winrm set winrm/config/winrs '@{MaxShellRunTime ="2147483647"}'
winrm set winrm/config/winrs '@{MaxProcessesPerShell ="5000"}'
winrm set winrm/config/winrs '@{MaxShellsPerUser ="5000"}'
winrm set winrm/config/winrs '@{AllowRemoteShellAccess="True"}'
winrm set winrm/config/winrs '@{MaxMemoryPerShellMB="2048"}'

Feito isso vamos reiniciar o serviço WinRM.

net stop winrm
net start winrm

5) ALTERAÇÕES REGEDIT.

No windows também é necessário realizar a alteração no regedit conforme página de instruções do plugin WinRM do Rundeck.

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

6) CONFIGURAÇÕES ADICIONAIS NO PROJETO RUNDECK.

Precisamos também em nosso projeto Rundeck adicionar dois parâmetros referente ao tempo de espera do WinRM do lado do servidor. O plugin WinRM do Rundeck está definido por padrão como PT60,000S, que equivale a 60 segundos. Precisamos aumentar este limite de tempo, para isso abra seu “projeto > configurações > Edit Configuration File” e adicione os parâmetros conforme ilustrado abaixo.

project.winrm-connection-timeout=28800000
project.winrm-timeout=PT28800.000S

Neste exemplo adicionamos o tempo limite de 8 horas, mas você também pode definir o tempo que acha adequado.

7) TESTANDO ACESSO AO NODE WINDOWS.

Agora precisamos testar se nosso node está funcionado. Para isso, acesse seu projeto criado, e no menu superior, escolha a opção “Commands“.

Na opção “Command” informe um comando pertinente ao Windows, aqui iremos fazer o teste com o comando “ipconfig”. Já na opção “Nodes”, escolha o node que criamos, “clt01”, e clique em “Run on 1 Node”. Se o resultado for a saída do “ipconfig” é porque seu node está configurado corretamente, caso contrário, revise os passos anteriores deste artigo, você pode ter esquecido de algo.

CONCLUSÃO

Neste artigo foi abordado de uma maneira simples e intuitiva, a configuração de um node windows, utilizando o plugin WinRM no Rundeck. Com isso a partir de agora é possível gerenciar ações remotas em ambientes com sistemas windows.

Se você gostou deste post e através dele pude lhe ajudar, o que acha de aproximarmos nosso contato? Siga meu blog e me adicione no Linkedin, aproveite para classificar algumas das minhas competências/recomendações, este simples gesto faz toda a diferença.

Att,
Rafael Oliveira
SysAdmin

Você pode compartilhar esse artigo.

Siga o Blog Via E-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 46 outros assinantes

Sobre o Autor

Rafael Oliveira Maria - Linux

Rafael Oliveira

Bacharel em Sistemas de Informação, SysAdmin, Professor, Blogueiro e Entusiasta Linux.

Certificados:

LPIC-1-Large
LPIC-2
LinuxPlus Logo Certified
itil-foundation-digital-badge

Gostou do conteúdo? Ajude-me a manter o blog.

PicPay - Linux

Aceitamos pagamentos e doações via PicPay link picpay.me/rafaeloliveimar

15 respostas

  1. Rafael me ajuda, como um amigo ai disse, não existe os projetos dentro da pasta que voce citou, estou usando o Rundeck em um Windows 2012 integrado com um SQL Server, como podemos fazer para criar um host?? Estou usando já a ultima versão 3.3.0.

    Valeu….

  2. Me desculpe não vi sua mensagem ali em cima, é que eu não achei o projeto dentro da pasta Projetos. Será que mudou nessa nova versão?

  3. Infelizmente esse Tutorial parece estar muito defasado porque muitos locais que você pede pra ir simplesmente não estão no lugar que você está dizendo, infelizmente não consegui ainda fazer rodar essa buldega utilizando WINRM. Estou usando o RUNDECK em um servidor Windows… Se você puder atualizar pra dar uma força seria bacana… Valeu pela iniciativa…

  4. Conseguir fazer, cuidado quando forem colocar na senha caracteres especial ele entende como parametro e não reconhece o arquivo.

    1. Bom dia Caio!

      Que bom que conseguiu, interessante sua colocação, mas creio que não são todos os caracteres especiais. Mesmo assim deixarei seu comentário aqui. Obrigado pela contribuição.

      Att,

  5. Rafael bom dia, muito bom seu tutorial, obrigado por compartilhar seu conhecimento conosco.
    Sou novo nessas ferramentas Devops e referente ao rundeck estou com uma duvida, nas criações de nodes no windows, existe alguma possibilidade de configurar ips dinamicos?
    meus dhcp troca de 7 em 7 dias, ip das maquinas estão sendo trocadas, e meu rundeck nao consegue acesso ao node quando quero executar algo nos nodes, por divergencias de nome/ip.

    1. Bom dia Kaique! Que bom que o conteúdo pode ser útil, fico feliz em poder ajudar. Referente a sua dúvida você tem três opções: 1) Utilize no lugar do IP o nome DNS da máquina, isso só irá funcionar se você tiver em sua rede um controlador de domínio ativo com resolução de nomes via DNS e seu servidor Rundeck esteja integrado ao domínio. 2) Definir nas configurações do DHCP IPs estáticos para as máquinas que deseja criar os nodes, desta forma elas nunca irão mudar de IP. 3) Colocar um IP fixo direto na máquina que deseja monitorar, como o Rundeck é muito utilizado para monitoramento de rotinas em servidor essa é a opção mais utilizada quando trata-se de servidor, pois na maioria das vezes seu servidor terá um ip estático. Att,

    1. Boa tarde Cesar, tudo bem?

      Como você somente colou o erro aqui, imagino que esteja com problemas. Vamos tentar resolver essa pendências. rs

      A alguns dias percebi que após algumas atualizações do windows a comunicação com os “nodes-windows” deixou de ser realizada, aparecendo o erro relatado. Para corrigir o problema acesse o resources.xml do seu projeto e na variável: hostname="192.168.10.22:5985" retire a informação de porta ao final do ip, ficando: hostname="192.168.10.22".

      Creio que seu problema será resolvido. Testa e comente aqui. Abr.

Ficou com dúvida? Alguma Sugestão ou Elogio? Deixe seu comentário!