Frage

Ich habe mir die Microsoft.Web.Administration.dll und die ServerManager-Klasse angesehen und versucht, unsere Windows Server 2008 IIS7-Instanz zu steuern.

Ich habe die Remoteverwaltung aktiviert und kann über das IIS-Remoteverwaltungstool eine Verbindung herstellen. Wenn ich jedoch Folgendes versuche, kann ich keine Verbindung herstellen:

ServerManager.OpenRemote(serverName);

Diese Klasse erlaubt mir nicht, einen Benutzernamen und ein Passwort auf dem Remote-IIS7-Server anzugeben, wie dies beim IIS-Remote-Administrationstool der Fall ist.

Dies alles wird über unseren Build-Prozess mit NAnt aufgerufen.

Wie steuern andere ihren Remote-IIS7-Server im Rahmen ihres CI-Setups?

War es hilfreich?

Lösung 3

Ich habe am Ende einen WCF-Dienst geschrieben, der auf der Remote-Maschine als Dienst läuft.Der Dienst läuft unter einem lokalen Konto mit Administratorrechten, damit die lokale IIS-Instanz auf dieser Maschine geändert werden kann.

aus meinem nant-skript habe ich eine Reihe von benutzerdefinierten Aufgaben, die mit dem WCF-Dienst kommunizieren und nach Bedarf einstellen und die IIS-Einstellungen ändern.

Da dies eine interne Dev-Umgebung ist, bin ich nicht zu besorgt um die Sicherheit und die tatsächlichen Änderungen an IIS, die ich erlaubt bin, ist sehr einfach.

Andere Tipps

Sie müssen die Anwendung unter einem Domänenbenutzer (Active Directory-Benutzer) ausführen, der die richtigen Berechtigungen zur Änderung der Konfigurationsdateien hat.

Die Windows-Authentifizierung leistet den Rest.

Wie Oded sagt, benötigen Sie Active Directory, um eine Verbindung zu einem Remote-Server herstellen zu können ServerManager.

Vorausgesetzt, Sie verfügen über einen Administrator-RDP-Zugriffsserver, gibt es eine Alternative: die Verwendung von WinRM und Remote PowerShell (funktioniert am besten mit PowerShell 2.0, das mit der neuesten Version von WinRM geliefert wird) in Ihren Build-Skripten:

Windows-Remoteverwaltungs-Befehlszeilentool (Winrm.cmd)

So konfigurieren Sie WinRM schnell für zwei Computer, die sich nicht in einer Domäne befinden:

Klient:

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

Server:

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

Nun gibt es einige Vorbehalte.WinRM schlägt eine Lücke in der Windows-Firewall für die Ports 5985 und 5986 für den Listener (unter Windows 2003 werden die Ports 80 und 443 verwendet).Dies gefällt Ihnen möglicherweise nicht und Sie sollten am besten mit Ihren Netzwerkadministratoren darüber sprechen, wie Sie dies absichern können.

Sobald Sie WinRM konfiguriert haben, müssen Sie ein Benutzerkonto auf dem Remote-Server konfigurieren, der Mitglied der Administratorengruppe ist.Sobald Sie fertig sind, können Sie es testen.Auf dem Build-Server:

# 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

Wenn alles in Ordnung ist, sollten Sie die folgende Antwort sehen:

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

Als nächstes stellen Sie eine Verbindung zu einer Remote-PowerShell-Sitzung her:

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

Wenn dies erfolgreich ist, sollte auf dem Remote-Computer eine PowerShell-Eingabeaufforderung angezeigt werden.

Mit Remote PowerShell können Sie dann den WebAdministration Provider für PowerShell laden und viele Aspekte von IIS nach Herzenslust manipulieren:

Webadministrationsanbieter (IIS) für Windows PowerShell

Um eine Verbindung zum Remote-Server herzustellen, müssen Sie eine bereitstellen PSCredential Objekt.Wie oben erwähnt würden Sie dies wie folgt bereitstellen:

$cred = Get-Credential

Dies erfordert jedoch immer eine Interaktion über die Tastatur, um einen Benutzernamen und ein Passwort einzugeben.Offensichtlich ist dies nicht gut für automatisiertes CI.

Sie können das Passwort jedoch in einer Datei speichern.Führen Sie dazu nur einmal (oder immer dann, wenn sich das Passwort ändert) Folgendes aus:

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

Dann, wenn Sie Ihre erstellen müssen PSCredential So authentifizieren Sie sich beim Remote-Server:

$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

Das obige Skript stammt aus dem folgenden Blogeintrag, ich habe es jedoch dupliziert, um es hier aufzubewahren, für den Fall, dass der Artikel nicht mehr funktioniert:

PSCredentials ohne Eingabeaufforderung verwenden – GeeksWithBlogs

Wie auch immer, sobald Sie mit dem Remote-Server verbunden sind, können Sie weitere Befehle erteilen, wie zum Beispiel:

Import-Module WebAdministration
CD IIS:\Sites

Und so weiter.

Die meisten der oben genannten Punkte sollten mit Vorsicht angegangen werden, wenn dieses Gerät mit dem Internet verbunden ist und der Zugriff nur über das Internet möglich ist.Wenn dies der Fall ist, sollten Sie erwägen, die WinRM-Ports nur auf VPN zu beschränken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top