Pergunta

Tenho pesquisado a classe Microsoft.Web.Administration.dll e a classe ServerManager, tentando controlar nossa instância IIS7 do Windows Server 2008.

Habilitei a administração remota e posso me conectar por meio da ferramenta de administração remota do IIS, mas quando tento usar o seguinte, não consigo me conectar:

ServerManager.OpenRemote(serverName);

Esta classe não me permite especificar um nome de usuário e uma senha no servidor IIS7 remoto, como faz a ferramenta de administração remota do IIS.

Tudo isso está sendo chamado por meio de nosso processo de construção usando NAnt.

Como outras pessoas controlam seu servidor IIS7 remoto como parte da configuração do CI?

Foi útil?

Solução 3

No final, escrevi um serviço WCF, que é executado na máquina remota como um serviço.O serviço é executado em uma conta local com direitos de administrador para que a instância local do IIS nessa máquina possa ser alterada.

No meu script NAnt, tenho uma série de tarefas personalizadas que se comunicam com o serviço WCF e alteram as configurações do IIS conforme necessário.

Como este é um ambiente de desenvolvimento interno, não estou muito preocupado com a segurança e as alterações reais no IIS que posso são muito básicas.

Outras dicas

Você precisará executar o aplicativo com um usuário de domínio (usuário do Active Directory) que tenha as permissões corretas para alterar os arquivos de configuração.

A autenticação do Windows fará o resto.

Como diz Oded, você precisa do Active Directory para poder abrir uma conexão com um servidor remoto usando ServerManager.

Supondo que você tenha um servidor de acesso RDP de administrador, há uma alternativa que é usar WinRM e Remote PowerShell (funciona melhor com PowerShell 2.0, que vem com a versão mais recente do WinRM) em seus scripts de construção:

Ferramenta de linha de comando de gerenciamento remoto do Windows (Winrm.cmd)

Para configurar rapidamente o WinRM para duas máquinas que não estão em um domínio:

Cliente:

winrm quickconfig  (just say yes)
winrm set winrm/config/Client/Auth '@{Basic="true"}'
:: Only do this next line if not using HTTPS
winrm set winrm/config/Client '@{AllowUnencrypted="true"}'
winrm set winrm/config/Client '@{TrustedHosts="hostname_or_ip"}'

Servidor:

winrm quickconfig (just say yes)
winrm set winrm/config/Service/Auth '@{Basic="true"}'

:: See: http://support.microsoft.com/kb/2019527 regarding https
winrm quickconfig -transport:https

:: Only do this if not using HTTPS AND you are happy about sending credentials
:: in clear text.
winrm set winrm/config/Service '@{AllowUnencrypted="true"}'

Agora existem algumas ressalvas.O WinRM abrirá um buraco no Firewall do Windows para as portas 5985 e 5986 para o ouvinte (se estiver executando o Windows 2003, usará as portas 80 e 443).Isso pode não ser do seu agrado e provavelmente seria melhor conversar com os administradores da rede sobre como proteger isso.

Depois de configurar o WinRM, você precisará de uma conta de usuário configurada no servidor remoto que seja membro do grupo de administradores.Uma vez feito isso, você pode testar.No servidor de compilação:

# the following line will prompt for a username and password, enter the name of the account
# you just configured on the IIS box
$cred = Get-Credential

# next test the connection
Test-WSMan -ComputerName <server_name_or_ip> -Authentication default `
           -Credential $cred

Se tudo estiver bem, você deverá ver a seguinte resposta:

wsmid           : http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.x
                  sd
ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor   : Microsoft Corporation
ProductVersion  : OS: 6.1.7600 SP: 0.0 Stack: 2.0

O próximo passo é conectar-se a uma sessão remota do PowerShell:

Enter-PSSession <server_name_or_ip> -Authentication default -Credential $cred

Se isso for bem-sucedido, você deverá ter um prompt do PowerShell na máquina remota.

Usando o PowerShell remoto, você pode carregar o provedor WebAdministration para PowerShell e manipular muitos aspectos do IIS como desejar:

Provedor de administração da Web (IIS) para Windows PowerShell

Para se conectar ao servidor remoto, você precisa fornecer um PSCredential objeto.Como mencionado acima, você forneceria isso usando:

$cred = Get-Credential

No entanto, isso sempre exige alguma interação do teclado para fornecer um nome de usuário e uma senha.Obviamente, isso não é bom para CI automatizado.

No entanto, você pode armazenar a senha em um arquivo.Para fazer isso, execute o seguinte apenas uma vez (ou sempre que a senha for alterada):

read-host -assecurestring | convertfrom-securestring | out-file C:\securestring.txt

Então, quando você precisar criar seu PSCredential para autenticar no servidor remoto:

$username = "deployment_user"
$password = cat C:\securestring.txt | convertto-securestring
$cred = new-object -typename System.Management.Automation.PSCredential `
         -argumentlist $username, $password

$serverNameOrIp = "192.168.1.1"
Enter-PSSession $serverNameOrIp -Authentication default -Credential $cred

O script acima foi obtido da seguinte entrada do blog, mas dupliquei para preservá-lo aqui, caso o artigo escureça:

Usando PSCredentials sem aviso - GeeksWithBlogs

De qualquer forma, quando estiver conectado ao servidor remoto, você poderá emitir comandos adicionais, como:

Import-Module WebAdministration
CD IIS:\Sites

E assim por diante.

A maioria dos itens acima deve ser abordada com cautela se esta máquina estiver voltada para a Internet e a única forma de acesso for pela Internet.Se for esse o caso, considere restringir as portas WinRM apenas para VPN.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top