1. Verwenden Sie das Playbook von Ansible, um httpd automatisch zu installieren 1) Konfigurieren Sie zunächst die Hosts-Datei von Ansible, damit der entsprechende Host von Ansible gesteuert werden kann Tipp: Wir haben die kontrollierten Hostadressen in der Hostliste konfiguriert, aber direkt das Ansible-Ping-Modul verwendet, um das Überleben des Hosts zu erkennen, aber es zeigte „Berechtigung verweigert“ an. In der Eingabeaufforderung werden wir aufgefordert, anzugeben, welche Authentifizierung verwendet werden soll. Standardmäßig wird Ansible per SSH-Schlüssel authentifiziert. Daher reicht es nicht aus, die IP-Adresse des Kontrollhosts in der Hostliste von Ansible zu konfigurieren. Wir müssen SSH auch basierend auf der KEY-Authentifizierung konfigurieren. 2) Konfigurieren Sie den Kontrollhost so, dass er sich anhand des SSH-Schlüssels authentifizieren kann [root@test ~]# IP als enp2s0 2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast Status UP-Gruppe Standard qlen 1000 Link/Ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff:ff inet 192.168.0.99/24 brd 192.168.0.255 Bereich global noprefixroute enp2s0 valid_lft für immer preferred_lft für immer inet 172.16.1.2/16 brd 172.16.255.255 Bereich global noprefixroute enp2s0:0 valid_lft für immer preferred_lft für immer inet6 fe80::230:18ff:fe51:af3c/64 Bereichslink valid_lft für immer preferred_lft für immer [root@test ~]# ssh-keygen Generieren eines öffentlichen/privaten RSA-Schlüsselpaars. Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/root/.ssh/id_rsa): Verzeichnis „/root/.ssh“ erstellt. Passphrase eingeben (leer, wenn keine Passphrase vorhanden ist): Geben Sie dieselbe Passphrase erneut ein: Ihre Identifikation wurde in /root/.ssh/id_rsa gespeichert. Ihr öffentlicher Schlüssel wurde in /root/.ssh/id_rsa.pub gespeichert. Der Schlüsselfingerabdruck ist: SHA256:UORxi5JhiKDBOhZP3FsbsZfyCjqUcjwqdl1qcnTyGsw root@test Das Randomart-Bild des Schlüssels ist: +---[RSA 2048]----+ |+.....oo= . | |.+.oo B.+.. | |o + *o=o. | |o..... ++ | |.o * + oS. | | = BB . | |.o = E o | |o . = o | | . | +----[SHA256]-----+ [root@test ~]# ssh-copy-id 192.168.0.99 -p 41319 /bin/ssh-copy-id: INFO: Quelle des/der zu installierenden Schlüssel: „/root/.ssh/id_rsa.pub“ Die Authentizität des Hosts '[192.168.0.99]:41319 ([192.168.0.99]:41319)' kann nicht festgestellt werden. Der ECDSA-Schlüsselfingerabdruck ist SHA256:W2pD2PA2K9tGKGVK+weiINcVESkUaHjsTI263OVqBh4. Der ECDSA-Schlüsselfingerabdruck lautet MD5:3a:f8:c9:b1:63:c6:c1:ae:e0:6e:e2:ca:17:4a:20:7a. Möchten Sie die Verbindung wirklich fortsetzen (ja/nein)? ja /bin/ssh-copy-id: INFO: Versuch, sich mit den neuen Schlüsseln anzumelden, um bereits installierte Schlüssel herauszufiltern /bin/ssh-copy-id: INFO: 1 Schlüssel müssen noch installiert werden -- wenn Sie jetzt dazu aufgefordert werden, installieren Sie die neuen Schlüssel Passwort von [email protected]: Anzahl hinzugefügter Schlüssel: 1 Versuchen Sie nun, sich mit „ssh -p ‚41319‘ ‚192.168.0.99‘“ beim Computer anzumelden. und überprüfen Sie, ob nur die gewünschten Schlüssel hinzugefügt wurden. [root@test ~]# scp -r .ssh 192.168.0.10:~/ Die Authentizität des Hosts „192.168.0.10 (192.168.0.10)“ kann nicht festgestellt werden. Der ECDSA-Schlüsselfingerabdruck ist SHA256:EG9nua4JJuUeofheXlgQeL9hX5H53JynOqf2vf53mII. Der ECDSA-Schlüsselfingerabdruck lautet MD5:57:83:e6:46:2c:4b:bb:33:13:56:17:f7:fd:76:71:cc. Möchten Sie die Verbindung wirklich fortsetzen (ja/nein)? ja Warnung: „192.168.0.10“ (ECDSA) wurde dauerhaft zur Liste der bekannten Hosts hinzugefügt. Passwort von [email protected]: id_rsa 100% 1675 677.0KB/s 00:00 id_rsa.pub 100% 391 207,6 KB/s 00:00 bekannte_hosts 100% 356 12,2 KB/s 00:00 autorisierte Schlüssel 100 % 391 12,6 KB/s 00:00 [root@test ~] Tipp: Die SSH-schlüsselbasierte Authentifizierung muss auf dem Ansible-Host durchgeführt werden. Ich generiere ein Paar SSH-Schlüssel auf dem Ansible-Host und kopiere dann den öffentlichen Schlüssel über ssh-copy-id auf den lokalen Computer, um die Datei authorized_keys zu generieren, und kopiere dann das .ssh-Verzeichnis auf den Remote-Client. Auf diese Weise kann sich der Ansible-Host über SSH basierend auf einem Schlüssel ohne Kennwort beim Remote-Client anmelden, und der Remote-Client kann sich auch über SSH ohne Kennwort beim Ansible-Host anmelden, wodurch eine bidirektionale SSH-schlüsselbasierte Authentifizierung realisiert wird. Wenn Sie nur eine einseitige SSH-schlüsselbasierte Authentifizierung wünschen, können Sie ein Schlüsselpaar auf dem Ansible-Host generieren und dann den öffentlichen Schlüssel an die andere Partei senden. Eine detaillierte Beschreibung der SSH-Schlüssel-basierten Authentifizierung finden Sie in meinem Blog https://www.jb51.net/article/180381.htm Test: Verwenden Sie einen Ansible-Host, um über SSH eine Verbindung zum Remote-Client-Host herzustellen [root@test ~]# ssh 192.168.0.10 Letzte Anmeldung: Mo 27 Jan 04:58:46 2020 von 192.168.0.99 [root@test-centos7-node1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue status UNBEKANNT qlen 1 Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 Bereich Host lo valid_lft für immer preferred_lft für immer inet6 ::1/128 Bereich Host valid_lft für immer preferred_lft für immer 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast Status UP qlen 1000 Link/Ether 00:0c:29:f2:82:0c brd ff:ff:ff:ff:ff:ff:ff inet 192.168.0.10/24 brd 192.168.0.255 Bereich global ens33 valid_lft für immer preferred_lft für immer inet6 fe80::20c:29ff:fef2:820c/64 Bereichslink valid_lft für immer preferred_lft für immer [root@test-centos7-node1 ~]# beenden AbmeldenVerbindung zu 192.168.0.10 geschlossen. [root@test ~] Tipp: Sie können sehen, dass sich der Ansible-Host normal ohne Kennwort beim Remote-Host anmelden kann. Als Nächstes verwenden wir das Ansible-Ping-Modul, um das Überleben des kontrollierten Hosts zu erkennen. Tipp: Sie können sehen, dass das Ping-Modul von Ansible verwendet wird, um das Überleben des Remote-Hosts zu erkennen. Der zurückgegebene Status ist SUCCESS und die Daten sind Pong, was bedeutet, dass der Remote-Host aktiv ist. An diesem Punkt ist die Ansible-Umgebung bereit. Als nächstes schreiben Sie ein Playbook zur Installation von httpd [root@test ~]# cat install_httpd.yml --- - Hosts: Websers Remote-Benutzer: root Aufgaben: - Name: Epel-Datei kopieren kopieren: src=/etc/yum.repos.d/CentOS-Base.repo dest=/etc/yum.repos.d/CentOS-Base.repo - Name: httpd installieren yum: Name=httpd - Name: httpd starten Dienst: Name=httpd Status=gestartet aktiviert=ja [root@test ~]# ansible-playbook -C install_httpd.yml SPIELEN [Websers] *************************************************************************************************************** AUFGABE [Epel-Datei kopieren] ********************************************************************************************************* geändert: [192.168.0.10] AUFGABE [httpd installieren] ****************************************************************************************************** geändert: [192.168.0.10] AUFGABE [httpd starten] *********************************************************************************************************** geändert: [192.168.0.10] SPIELZUSAMMENFASSUNG *************************************************************************************************************** 192.168.0.10 : ok=3 geändert=3 nicht erreichbar=0 fehlgeschlagen=0 [root@test ~] Tipp: Der Hauptinhalt des obigen Playbooks besteht darin, die lokale Yum-Quelle auf den Remote-Server zu kopieren, dann das httpd-Paket über Yum zu installieren und schließlich httpd zu starten. Nachdem wir das Playbook geschrieben haben, verwenden wir den Befehl ansible-playbook -C install_httpd.yml, um das von uns geschriebene Playbook zu testen. Es gibt kein Problem. Als Nächstes verwenden wir ansible-playbook, um httpd zu installieren [root@test ~]# ansible-playbook install_httpd.yml SPIELEN [Websers] *************************************************************************************************************** AUFGABE [Epel-Datei kopieren] ********************************************************************************************************* geändert: [192.168.0.10] AUFGABE [httpd installieren] ****************************************************************************************************** geändert: [192.168.0.10] AUFGABE [httpd starten] *********************************************************************************************************** geändert: [192.168.0.10] SPIELZUSAMMENFASSUNG *************************************************************************************************************** 192.168.0.10 : ok=3 geändert=3 nicht erreichbar=0 fehlgeschlagen=0 [root@test ~] Tipp: Aus dem Ausführungsstatus von Ansible-Playbook auf Playbook geht hervor, dass es erfolgreich war. Als Nächstes verwenden wir den Browser direkt, um auf 192.168.0.10 zuzugreifen und zu prüfen, ob auf httpd normal zugegriffen werden kann. Wenn normal darauf zugegriffen werden kann, bedeutet dies, dass httpd installiert wurde. Tipp: Sie können sehen, dass wir mit dem Browser direkt auf die Testseite von 192.168.0.10 zugreifen können, was darauf hinweist, dass httpd erfolgreich auf 192.168.0.10 installiert wurde 2. Richten Sie einen httpd-Server ein, der zwei namenbasierte virtuelle Hosts erfordert: (1) www.X.com, das Seitendateiverzeichnis ist /web/vhosts/x; das Fehlerprotokoll ist /var/log/httpd/x.err und das Zugriffsprotokoll ist /var/log/httpd/x.access Erstellen Sie eine neue Konfigurationsdatei für den virtuellen Host www.X.com [root@test ~]# cat x_com.conf <VirtuellerHost *:80> Servername www.X.com DocumentRoot "/web/vhosts/x" <Verzeichnis "/web/vhosts/x"> Optionen Keine AllowOverride Keine Erfordern alle gewährten </Verzeichnis> Fehlerprotokoll „logs/x.err“ CustomLog "logs/x.access" kombiniert </VirtualHost> [root@test ~] Tipp: Wir erstellen die Konfigurationsdatei auf dem Ansible-Host und verwenden dann Ansible, um die Datei in das entsprechende Verzeichnis des entsprechenden Hosts zu übertragen. (2) www.Y.com, das Seitendateiverzeichnis ist /web/vhosts/y; das Fehlerprotokoll ist /var/log/httpd/www2.err und das Zugriffsprotokoll ist /var/log/httpd/y.access Erstellen Sie eine neue Konfigurationsdatei für den virtuellen Host www.Y.com [root@test ~]# cat y_com.conf <VirtuellerHost *:80> Servername www.Y.com DocumentRoot "/web/vhosts/y" <Verzeichnis "/web/vhosts/y"> Optionen Keine AllowOverride Keine Erfordern alle gewährten </Verzeichnis> Fehlerprotokoll "logs/www2.err" CustomLog "logs/y.access" kombiniert </VirtualHost> [root@test ~] (3) Erstellen Sie für die beiden virtuellen Hosts jeweils eine Homepage-Datei „index.html“, wobei der Inhalt die entsprechenden Hostnamen sind. [root@test ~]# cat x_index.html <h1>www.X.com</h1> [root@test ~]# Katze y_index.html <h1>www.Y.com</h1> [root@test ~] Tipp: Nachdem die oben genannten Dateien auf dem Ansible-Host vorbereitet sind, schreiben wir ein Playbook, um die entsprechenden Dateien direkt auf den Remote-Host zu übertragen. [root@test ~]# cat set_virtualhost_conf_file.yml --- - Hosts: Websers Remote-Benutzer: root Aufgaben: - Name: mkdir Virtualhost Documentroot-Verzeichnis Shell: mkdir -p /web/vhosts/{x,y} - Name: Kopiere x_com.conf auf den Remotehost kopieren: src=/root/x_com.conf dest=/etc/httpd/conf.d/x_com.conf - Name: x_com-Indexdatei kopieren kopieren: src=/root/x_index.html dest=/web/vhosts/x/index.html - Name: y_com.conf auf den Remotehost kopieren kopieren: src=/root/y_com.conf dest=/etc/httpd/conf.d/y_com.conf - Name: y_com-Indexdatei kopieren kopieren: src=/root/y_index.html dest=/web/vhosts/y/index.html [root@test ~] Tipp: Der Inhalt der obigen Datei verschiebt hauptsächlich die von uns erstellte Konfigurationsdatei in das entsprechende Verzeichnis des entsprechenden Hosts. Als nächstes überprüfen wir, ob das von uns geschriebene Playbook Syntaxprobleme aufweist. [root@test ~]# ansible-playbook -C set_virtualhost_conf_file.yml SPIELEN [Websers] *************************************************************************************************************** TASK [mkdir virtualhost documentroot-Verzeichnis] ************************************************************************** überspringen: [192.168.0.10] AUFGABE [x_com.conf auf Remotehost kopieren] ********************************************************************************************* geändert: [192.168.0.10] AUFGABE [x_com-Indexdatei kopieren] ************************************************************************************************** geändert: [192.168.0.10] AUFGABE [y_com.conf nach Remotehost kopieren] ********************************************************************************************* geändert: [192.168.0.10] AUFGABE [y_com-Indexdatei kopieren] ***************************************************************************************************** geändert: [192.168.0.10] SPIELZUSAMMENFASSUNG *************************************************************************************************************** 192.168.0.10 : ok=4 geändert=4 nicht erreichbar=0 fehlgeschlagen=0 [root@test ~] Tipp: Das Testen des Playbooks ist kein Problem. Als Nächstes führen wir das Playbook aus, übertragen die entsprechenden Dateien auf den httpd-Server und prüfen dann, ob die von uns geschriebene Konfigurationsdatei auf dem Server korrekt ist. [root@test ~]# ansible-playbook set_virtualhost_conf_file.yml SPIELEN [Websers] *************************************************************************************************************** TASK [mkdir virtualhost documentroot-Verzeichnis] ************************************************************************** [WARNUNG]: Erwägen Sie die Verwendung des Dateimoduls mit state=directory, anstatt mkdir auszuführen. geändert: [192.168.0.10] AUFGABE [x_com.conf auf Remotehost kopieren] ********************************************************************************************* geändert: [192.168.0.10] AUFGABE [x_com-Indexdatei kopieren] ********************************************************************************************** geändert: [192.168.0.10] AUFGABE [y_com.conf nach Remotehost kopieren] ********************************************************************************************* geändert: [192.168.0.10] AUFGABE [y_com-Indexdatei kopieren] ***************************************************************************************************** geändert: [192.168.0.10] SPIELZUSAMMENFASSUNG *************************************************************************************************************** 192.168.0.10 : ok=5 geändert=5 nicht erreichbar=0 fehlgeschlagen=0 [root@test ~] Tipp: Aus dem obigen Rückgabestatus geht hervor, dass alles erfolgreich war, aber die erste Aufgabe fordert uns auf, das Dateimodul zum Erstellen eines Verzeichnisses zu verwenden, was besser ist. Als Nächstes verwenden wir das Ansible-Shell-Modul, um zu überprüfen, ob die Syntax der Konfigurationsdatei auf dem Remote-Server korrekt ist. [root@test ~]# ansible websers -m shell -a 'httpd -t' 192.168.0.10 | ERFOLGREICH | rc=0 >> AH00558: httpd: Der vollqualifizierte Domänenname des Servers konnte mit fe80::20c:29ff:fef2:820c nicht zuverlässig ermittelt werden. Setzen Sie die Direktive „ServerName“ global, um diese Meldung zu unterdrücken Syntax OK [root@test ~] Tipp: Wir verwenden Ansible, um die Syntax der httpd-Konfigurationsdatei auf dem Remote-Host zu überprüfen. Es zeigt uns an, dass kein Servername vorhanden ist. Sie können diese Eingabeaufforderung ignorieren. Wenn Sie der Meinung sind, dass Sie sich damit befassen müssen, können Sie ServerName in der Hauptkonfigurationsdatei von httpd finden und den entsprechenden Servernamen konfigurieren. Als Nächstes starten wir httpd neu und greifen dann auf die beiden virtuellen Hosts auf dem Client zu. [root@test ~]# ansible websers -m shell -a 'systemctl restart httpd' 192.168.0.10 | ERFOLGREICH | rc=0 >> [root@test ~] Ändern Sie die Datei /etc/hosts auf dem Client, sodass www.X.com und www.Y.com zum Remote-Host aufgelöst werden können. [root@test ~]# cat /etc/hosts 127.0.0.1 lokaler Host lokaler Host.lokale Domäne lokaler Host4 lokaler Host4.lokale Domäne4 ::1 lokaler Host lokaler Host.lokale Domäne lokaler Host6 lokaler Host6.lokale Domäne6 192.168.0.10 www.X.com www.Y.com [root@test ~] Test: Greifen Sie mit curl jeweils auf die beiden virtuellen Hosts zu und prüfen Sie, ob die entsprechenden Homepage-Dateiinhalte unterschiedlich sind [root@test ~]# curl http://www.X.com/index.html <h1>www.X.com</h1> [root@test ~]# curl http://www.Y.com/index.html <h1>www.Y.com</h1> [root@test ~] Tipp: Wir verwenden curl, um auf die Homepage-Dateien ihrer jeweiligen virtuellen Hosts zuzugreifen, und können den entsprechenden Inhalt der Homepage-Datei sehen. Natürlich können Sie auch die Windows-Hosts-Datei ändern, den entsprechenden analysierten Inhalt hineinschreiben und dann den Windows-Browser verwenden, wie unten gezeigt: Tipp: Suchen Sie die Hosts-Datei unter Windows und fügen Sie den entsprechenden Eintrag wie folgt hinzu Tipp: Als nächstes verwenden wir den Windows-Browser, um auf die nächsten beiden virtuellen Hosts zuzugreifen Als Nächstes prüfen wir, ob die httpd-Serverprotokolle generiert wurden. [root@test ~]# ansible websers -m shell -a 'ls -l /var/log/httpd' 192.168.0.10 | ERFOLGREICH | rc=0 >> Gesamtdosis 16 -rw-r--r--. 1 root root 2668 Jan 27 06:30 Zugriffsprotokoll -rw-r--r--. 1 root root 2940 Jan 27 07:34 Fehlerprotokoll -rw-r--r--. 1 root root 0 Januar 27 07:38 www2.err -rw-r--r--. 1 root root 500 27. Jan 07:52 x.access -rw-r--r--. 1 root root 0 Jan 27 07:38 x.err -rw-r--r--. 1 root root 500 27. Januar 07:52 y.access [root@test ~]# ansible websers -m shell -a 'cat /var/log/httpd/x.access' 192.168.0.10 | ERFOLGREICH | rc=0 >> 192.168.0.99 - - [27/Jan/2020:07:39:15 -0500] "GET /index.html HTTP/1.1" 200 20 "-" "curl/7.29.0" 192.168.0.232 - - [27/Jan/2020:07:52:31 -0500] "GET / HTTP/1.1" 200 20 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/69.0.3497.100 Safari/537.36" 192.168.0.232 - - [27/Jan/2020:07:52:31 -0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://www.x.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/69.0.3497.100 Safari/537.36" [root@test ~]# ansible websers -m shell -a 'cat /var/log/httpd/y.access' 192.168.0.10 | ERFOLGREICH | rc=0 >> 192.168.0.99 - - [27/Jan/2020:07:39:19 -0500] "GET /index.html HTTP/1.1" 200 20 "-" "curl/7.29.0" 192.168.0.232 - - [27/Jan/2020:07:52:48 -0500] "GET / HTTP/1.1" 200 20 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/69.0.3497.100 Safari/537.36" 192.168.0.232 - - [27/Jan/2020:07:52:48 -0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://www.y.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/69.0.3497.100 Safari/537.36" [root@test ~] Tipp: Sie können sehen, dass auf dem httpd-Server Protokolldateien mit entsprechenden Namen generiert wurden. Zusammenfassen Oben ist die vom Editor vorgestellte Methode, um die automatische Installation und Konfiguration von httpd durch Ansible auf einem Linux-System zu realisieren. Ich hoffe, sie wird allen helfen! Das könnte Sie auch interessieren:
|
<<: So verwenden Sie Axios, um Netzwerkanforderungen in React Native zu stellen
>>: Detaillierte Erklärung des Server-ID-Beispiels bei der MySQL-Master-Slave-Synchronisierung
Wie schreibt man „join“? Wenn Sie „Left Join“ ver...
1. Einige Tipps zu mit class in react deklarierte...
Downloadadresse der offiziellen MySQL-Website: ht...
1. RTMP Das RTMP-Streaming-Protokoll ist ein von ...
Dieser Artikel zeichnet einige wichtige Einstellu...
Erstellen des Projekts Führen Sie die Befehlszeil...
Fehler: Connection to blog0@localhost failed. [08...
Vorwort Im vorherigen Artikel wurden zwei Datenty...
Erfahren Sie, wie Sie Ihre eigene Website auf Apa...
Inhaltsverzeichnis Installieren Sie den Vim-Plugi...
Dieser Artikel stellt vor, wie Sie durch Instanzi...
Die Verwendung von CI zum Erstellen von Docker-Im...
Dieser Artikel beschreibt, wie man eine Phalcon-U...
In diesem Artikel wird der spezifische Code von V...
Vorwort: Die am häufigsten verwendete Architektur...