Pregunta

He estado investigando Microsoft.Web.Administration.dll y la clase ServerManager, intentando controlar nuestra instancia de Windows Server 2008 IIS7.

He habilitado la administración remota y puedo conectarme a través de la herramienta de administración remota de IIS, sin embargo, cuando intento usar lo siguiente no puedo conectarme:

ServerManager.OpenRemote(serverName);

Esta clase no me permite especificar un nombre de usuario y contraseña en el servidor IIS7 remoto, como lo hace la herramienta de administración remota de IIS.

Todo esto se llama a través de nuestro proceso de compilación usando NAnt.

¿Cómo controlan otros su servidor IIS7 remoto como parte de su configuración de CI?

¿Fue útil?

Solución 3

Escribí un servicio WCF al final, que se ejecuta en la máquina remota como un servicio.El servicio se ejecuta bajo una cuenta local con derechos de administrador para que se pueda cambiar la instancia de IIS local en esa máquina.

De mi script Nant Tengo una serie de tareas personalizadas que se comunican con el servicio WCF y cambian la configuración de IIS según sea necesario.

Como este es un entorno de desarrollo interno, no estoy demasiado preocupado por la seguridad y los cambios reales en IIS, estoy permitido, son muy básicos.

Otros consejos

Deberá ejecutar la aplicación en un usuario de dominio (usuario de Active Directory) que tiene los permisos correctos para cambiar los archivos de configuración.

La autenticación de Windows hará el resto.

Como dice Oded, necesita Active Directory para poder abrir una conexión a un servidor remoto usando ServerManager.

Suponiendo que tiene un servidor de acceso RDP de administrador, existe una alternativa que es usar WinRM y Remote PowerShell (funciona mejor con PowerShell 2.0 que viene con la última versión de WinRM) en sus scripts de compilación:

Herramienta de línea de comandos de administración remota de Windows (Winrm.cmd)

Para configurar rápidamente WinRM para dos máquinas que no están en un dominio:

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"}'

Ahora hay algunas advertencias.WinRM perforará un agujero en el Firewall de Windows para los puertos 5985 y 5986 para el oyente (si ejecuta Windows 2003, usará los puertos 80 y 443).Puede que esto no sea de su agrado y probablemente sea mejor que hable con sus administradores de red sobre cómo protegerlo.

Una vez que haya configurado WinRM, necesitará una cuenta de usuario configurada en el servidor remoto que sea miembro del grupo de administradores.Una vez hecho esto, puedes probar.En el servidor de compilación:

# 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

Si todo está bien deberías ver la siguiente respuesta:

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

Lo siguiente es conectarnos a una sesión remota de PowerShell:

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

Si esto tiene éxito, debería tener un mensaje de PowerShell en la máquina remota.

Al utilizar PowerShell remoto, puede cargar el proveedor de administración web para PowerShell y manipular muchos aspectos de IIS a su gusto:

Proveedor de administración web (IIS) para Windows PowerShell

Para conectarse al servidor remoto debe proporcionar un PSCredential objeto.Como se mencionó anteriormente, proporcionaría esto usando:

$cred = Get-Credential

Sin embargo, esto siempre exige cierta interacción del teclado para proporcionar un nombre de usuario y contraseña.Obviamente, esto no es bueno para la CI automatizada.

Sin embargo, puedes almacenar la contraseña en un archivo.Para hacer esto, ejecute lo siguiente solo una vez (o cada vez que cambie la contraseña):

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

Luego, cuando necesites crear tu PSCredential para autenticarse en el 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

El script anterior se obtuvo de la siguiente entrada del blog, pero lo he duplicado para conservarlo aquí en caso de que el artículo se oscurezca:

Usar PSCredentials sin aviso - GeeksWithBlogs

De todos modos, una vez que esté conectado al servidor remoto, puede emitir más comandos como:

Import-Module WebAdministration
CD IIS:\Sites

Etcétera.

La mayor parte de lo anterior debe abordarse con precaución si esta máquina tiene acceso a Internet y la única forma de acceder es a través de Internet.Si este es el caso, considere restringir los puertos WinRM solo a VPN.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top