Laden von Konfigurationsdateien
Das Laden von Konfigurationsdateien auf dem Gerät ist hilfreich, um Teile von Konfigurationsdateien zu laden, die auf vielen Geräten innerhalb eines Netzwerks gemeinsam sein können.
Beispiele für das Laden einer Konfiguration aus einer Datei oder dem Terminal
Sie können eine Datei mit Konfigurationsdaten für ein Gerät von Juniper Networks erstellen, die Datei auf das lokale Gerät kopieren und die Datei dann in die CLI laden. Nachdem Sie die Datei geladen haben, können Sie sie festschreiben, um die Konfiguration auf dem Gerät zu aktivieren, oder Sie können die Konfiguration interaktiv über die CLI bearbeiten und die Konfiguration zu einem späteren Zeitpunkt bestätigen.
Sie können auch eine Konfiguration erstellen, während Sie am Terminal tippen, und dann die Konfiguration laden. Das Laden einer Konfiguration aus dem Terminal ist nützlich, wenn Sie vorhandene Teile der Konfiguration ausschneiden und an anderer Stelle in der Konfiguration einfügen.
Um eine vorhandene Konfigurationsdatei zu laden, die sich auf dem Gerät befindet, verwenden Sie den Befehl configuration mode:load
[edit] user@host# load (factory-default | merge | override | patch | replace | set | update) filename <relative> <json>
Um eine Konfiguration aus dem Terminal zu laden, verwenden Sie die folgende Version des Befehls configuration mode.load
Drücken Sie Strg-d, um die Eingabe zu beenden.
[edit] user@host# load (factory-default | merge | override | patch | replace | set | update) terminal <relative> <json>
Um eine gesamte Konfiguration zu ersetzen, geben Sie die Option auf einer beliebigen Ebene der Hierarchie an.override
Bei einem Vorgang wird die aktuelle Kandidatenkonfiguration vollständig durch die Datei ersetzt, die Sie laden.load override
Wenn Sie also eine vollständige Konfiguration gespeichert haben, verwenden Sie diese Option.
Bei einem Vorgang wird die aktuelle Kandidatenkonfiguration verworfen und die Konfiguration oder die Konfiguration, die Sie im Terminal eingeben, geladen.override
filename Wenn Sie die Option verwenden und die Konfiguration bestätigen, analysieren alle Systemprozesse die Konfiguration erneut.override
Um Teile einer Konfiguration zu ersetzen, geben Sie die Option an.replace
Der Vorgang sucht nach Tags, die Sie der geladenen Datei hinzugefügt haben.load replace
replace:
Der Vorgang ersetzt dann diese Teile der Kandidatenkonfiguration durch das, was nach dem Tag angegeben wird. Dies ist nützlich, wenn Sie mehr Kontrolle darüber haben möchten, was genau geändert wird. Damit dieser Vorgang funktioniert, müssen Sie Tags in die Datei oder Konfiguration aufnehmen , die Sie im Terminal eingeben.replace:
Die Software sucht nach den Tags, löscht ggf. die vorhandenen gleichnamigen Anweisungen und ersetzt sie durch die eingehende Konfiguration.replace:
Wenn keine gleichnamige Anweisung vorhanden ist, fügt der Vorgang der Konfiguration die mit dem Tag markierten Anweisungen hinzu.replace
replace:
Wenn Sie in einem Oder-Vorgang eine Datei angeben oder Text eingeben, der Tags enthält , werden die Tags ignoriert.override
merge
replace:
replace:
In diesem Szenario hat der Vorgang "oder" Vorrang und wird ausgeführt.override
merge
Wenn Sie einen Vorgang ausführen und die von Ihnen angegebene Datei keine Tags enthält , wird der Vorgang als Vorgang ausgeführt.replace
replace:
replace
merge
Der Vorgang wird auch als Vorgang ausgeführt, wenn der eingegebene Text keine Tags enthält .replace
merge
replace:
Diese Informationen können nützlich sein, wenn Sie automatisierte Skripts ausführen und nicht im Voraus wissen können, ob die Skripts einen Vorgang oder einen Vorgang ausführen müssen.replace
merge
Die Skripts können den Vorgang verwenden, um beide Fälle abzudecken.replace
Bei diesem Vorgang wird die Konfiguration aus der gespeicherten Datei oder dem Terminal mit der vorhandenen Kandidatenkonfiguration zusammengeführt.load merge
Diese Informationen sind nützlich, wenn Sie neue Konfigurationsabschnitte hinzufügen. Angenommen, Sie fügen der Hierarchieebene eine BGP-Konfiguration hinzu, für die es zuvor keine BGP-Konfiguration gab.[edit protocols]
Sie können den Vorgang verwenden, um die eingehende Konfiguration mit der vorhandenen Kandidatenkonfiguration zu kombinieren.load merge
Wenn die vorhandene Konfiguration und die eingehende Konfiguration widersprüchliche Anweisungen enthalten, überschreiben die Anweisungen in der eingehenden Konfiguration die Anweisungen in der vorhandenen Konfiguration.
Um nur die Teile der Konfiguration zu ersetzen, die sich geändert haben, geben Sie die Option auf einer beliebigen Ebene der Hierarchie an.update
Der Vorgang vergleicht die Kandidatenkonfiguration und die neuen Konfigurationsdaten.load update
Dieser Vorgang ändert nur die Teile der Kandidatenkonfiguration, die sich von der neuen Konfiguration unterscheiden. Sie würden diesen Vorgang z. B. verwenden, wenn eine BGP-Konfiguration vorhanden ist und die Datei, die Sie laden, diese in irgendeiner Weise ändert.
Die Optionen , und unterstützen das Laden von Konfigurationsdaten im JSON-Format (JavaScript Object Notation).merge
override
update
Wenn Sie Konfigurationsdaten laden, die das JSON-Format verwenden, müssen Sie die Option im Befehl angeben.json
Informationen zum Laden von JSON-Konfigurationsdaten, die ungeordnete Listeneinträge enthalten, d. h. Listeneinträge, bei denen der Listenschlüssel nicht unbedingt das erste Element im Listeneintrag ist, finden Sie unter .Laden von JSON-Konfigurationsdaten mit ungeordneten Listeneinträgen
Um einen Teil der Konfiguration mit einer Patch-Datei zu ändern, geben Sie die Option an.patch
Der Vorgang lädt eine Datei oder Terminaleingabe, die Konfigurationsänderungen enthält.load patch
Zuerst geben Sie auf einem Gerät, auf dem die Konfigurationsänderungen bereits vorgenommen wurden, den Befehl ein, um die Unterschiede zwischen zwei Konfigurationen auszugeben.show | compare
Dann können Sie die Unterschiede auf ein anderes Gerät laden. Der Vorteil des Befehls besteht darin, dass Sie keine Snippets aus verschiedenen Hierarchieebenen in eine Textdatei kopieren müssen, bevor Sie sie auf das Zielgerät laden.load patch
Dies kann eine nützliche Zeitersparnis sein, wenn Sie mehrere Geräte mit denselben Optionen konfigurieren. Angenommen, Sie konfigurieren eine Routing-Richtlinie auf Router1 und möchten die Richtlinienkonfiguration auf Router2, Router3 und Router4 replizieren. Sie können die Operation verwenden.load patch
In diesem Beispiel führen Sie zuerst den Befehl aus.show | compare
Beispiel:
user@router1# show | compare rollback 3 [edit protocols ospf] + export default-static; - export static-default [edit policy-options] + policy-statement default-static { + from protocol static; + then accept; + }
In Fortsetzung dieses Beispiels kopieren Sie die Ausgabe des Befehls in die Zwischenablage und stellen sicher, dass die Hierarchieebenen enthalten sind.show | compare
Auf router2, router3 und router4 geben Sie die Ausgabe ein und fügen sie ein .load patch terminal
Drücken Sie dann die Eingabetaste und dann Strg-d, um den Vorgang zu beenden. Wenn die Patch-Eingabe unterschiedliche Werte für eine vorhandene Anweisung angibt, überschreibt die Patch-Eingabe die vorhandene Anweisung.
Wenn Sie die Option , , oder verwenden möchten, ohne die vollständige Hierarchieebene anzugeben, geben Sie die Option an.merge
replace
set
update
relative
Mit dieser Option wird die eingehende Konfiguration relativ zu Ihrem aktuellen Bearbeitungspunkt in der Konfigurationshierarchie geladen.
Beispiel:
[edit system]
user@host# show static-host-mapping
bob sysid 987.654.321ab
[edit system]
user@host# load replace terminal relative
[Type ^D at a new line to end input]
replace: static-host-mapping {
bob sysid 0123.456.789bc;
}
load complete
[edit system]
user@host# show static-host-mapping
bob sysid 0123.456.789bc;
Um eine Konfiguration zu laden, die Konfigurationsmodusbefehle enthält , geben Sie die Option an.set
set
Diese Option führt die Konfigurationsanweisungen Zeile für Zeile aus, wie sie in einer Datei oder von einem Terminal aus gespeichert sind. Die Anweisungen können beliebige Konfigurationsmodusbefehle enthalten, z. B. , , und .set
edit
exit
top
Um eine Konfigurationsdatei von einem anderen Netzwerksystem auf den lokalen Router zu kopieren, können Sie die SSH- und Telnet-Dienstprogramme verwenden, wie im CLI-Explorer beschrieben.https://www.juniper.net/documentation/content-applications/cli-explorer/junos/
Wenn Sie in einer Common Criteria-Umgebung arbeiten, werden Systemprotokollmeldungen immer dann erstellt, wenn ein Attribut geändert wird (z. B. Kennwortänderungen oder Änderungen am gemeinsamen geheimen RADIUS-Schlüssel).secret
Diese Änderungen werden während der folgenden Konfigurationsladevorgänge protokolliert:
load merge load replace load override load update
Funktionsweise der Zeichenkodierung auf Geräten von Juniper Networks
Die Konfigurationsdaten des Junos OS und die Ausgabe von Betriebsbefehlen können Nicht-ASCII-Zeichen enthalten, die außerhalb des 7-Bit-ASCII-Zeichensatzes liegen. Bei der Anzeige von Betriebs- oder Konfigurationsdaten in bestimmten Formaten oder innerhalb eines bestimmten Sitzungstyps maskiert und kodiert die Software diese Zeichen. Die Software maskiert oder codiert die Zeichen mit der entsprechenden UTF-8-Dezimalzeichenreferenz.
Die CLI versucht, alle Nicht-ASCII-Zeichen in Konfigurationsdaten anzuzeigen, die im Text-, Set- oder JSON-Format erzeugt werden. Die CLI versucht auch, diese Zeichen in der Befehlsausgabe anzuzeigen, die im Textformat erzeugt wird. In den Ausnahmefällen zeigt die CLI stattdessen den UTF-8-Dezimalzeichenverweis an. (Ausnahmefälle sind Konfigurationsdaten im XML-Format und Befehlsausgabe im XML- oder JSON-Format.) In NETCONF- und Junos-XML-Protokollsitzungen wird ein ähnliches Ergebnis angezeigt, wenn Sie Konfigurationsdaten oder Befehlsausgaben anfordern, die Nicht-ASCII-Zeichen enthalten. In diesem Fall gibt der Server den entsprechenden UTF-8-Dezimalzeichenverweis für diese Zeichen für alle Formate zurück.
Angenommen, das folgende Benutzerkonto, das den lateinischen Kleinbuchstaben n mit einer Tilde (ñ) enthält, ist auf dem Gerät konfiguriert.
[edit] user@host# set system login user mariap class super-user uid 2007 full-name "Maria Peña"
Wenn Sie die resultierende Konfiguration im Textformat anzeigen, gibt die CLI das entsprechende Zeichen aus.
[edit] user@host# show system login user mariap full-name "Maria Peña"; uid 2007; class super-user;
Wenn Sie die resultierende Konfiguration im XML-Format in der CLI anzeigen, wird das Zeichen ñ der entsprechenden UTF-8-Dezimalzeichenreferenz zugeordnet.ñ
Das gleiche Ergebnis tritt auf, wenn Sie die Konfiguration in einem beliebigen Format in einer NETCONF- oder Junos XML-Protokollsitzung anzeigen.
[edit] user@host# show system login user mariap | display xml <rpc-reply xmlns:junos="http://xml.juniper.net/junos/17.2R1/junos"> <configuration junos:changed-seconds="1494033077" junos:changed-localtime="2017-05-05 18:11:17 PDT"> <system> <login> <user> <name>mariap</name> <full-name>Maria Peña</full-name> <uid>2007</uid> <class>super-user</class> </user> </login> </system> </configuration> <cli> <banner>[edit]</banner> </cli> </rpc-reply>
Wenn Sie Konfigurationsdaten auf ein Gerät laden, können Sie Nicht-ASCII-Zeichen mit den entsprechenden UTF-8-Dezimalzeichenreferenzen laden.
Informationen zum Angeben von Anweisungen und Bezeichnern
Dieses Thema enthält Details zu CLI-Containeranweisungen und Leaf-Anweisungen, damit Sie wissen, wie Sie diese beim Erstellen von ASCII-Konfigurationsdateien angeben müssen. In diesem Thema wird auch beschrieben, wie die CLI eine Typüberprüfung durchführt, um zu überprüfen, ob die eingegebenen Daten das richtige Format haben.
Angeben von Anweisungen
Anweisungen werden auf zwei Arten angezeigt, entweder mit geschweiften Klammern ({ }) oder ohne:
-
Anweisungsname und -bezeichner, wobei eine oder mehrere Anweisungen auf niedrigerer Ebene in geschweifte Klammern eingeschlossen sind:
statement-name1 identifier-name { statement-name2; additional-statements; }
-
Anweisungsname, Bezeichner und ein einzelner Bezeichner:
statement-name identifier-name1 identifier-name2;
Das ist der Name der Anweisung.statement-name Das ist ein Name oder eine andere Zeichenfolge, die eine Instanz einer Anweisung eindeutig identifiziert.identifier-name Sie verwenden einen Bezeichner, wenn eine Anweisung mehr als einmal in einer Konfiguration angegeben werden kann.
Wenn Sie eine Anweisung angeben, müssen Sie je nach Anweisungshierarchie einen Anweisungsnamen, einen Bezeichnernamen oder beides angeben.
Sie geben Bezeichner auf eine der folgenden Arten an:
-
– Das ist ein Schlüsselwort, das zur eindeutigen Identifizierung einer Anweisung verwendet wird, wenn eine Anweisung mehr als einmal in einer Anweisung angegeben werden kann.identifier-nameidentifier-name
-
– Das ist ein Schlüsselwort und das ist eine erforderliche Optionsvariable.identifier-name valueidentifier-namevalue
-
[—Das ist ein Schlüsselwort, das mehrere Werte akzeptiert.identifier-namevalue1 value2 value3
...]
identifier-name Die eckigen Klammern sind erforderlich, wenn Sie eine Gruppe von Werten angeben. Sie sind jedoch optional, wenn Sie nur einen Wert angeben.
Die folgenden Beispiele veranschaulichen, wie Anweisungen und Bezeichner in der Konfiguration angegeben werden:
protocol { # Top-level statement (statement-name). ospf { # Statement under "protocol" (statement-name). area 0.0.0.0 { # OSPF area "0.0.0.0" (statement-name identifier-name), interface so-0/0/0 { # which contains an interface named "so-0/0/0." hello-interval 25; # Identifier and value (identifier-name value). priority 2; # Identifier and value (identifier-name value). disable; # Flag identifier (identifier-name). } interface so-0/0/1; # Another instance of "interface," named so-0/0/1, } # this instance contains no data, so no braces } # are displayed. } policy-options { # Top-level statement (statement-name). term term1 { # Statement under "policy-options" # (statement-name value). from { # Statement under "term" (statement-name). route-filter 10.0.0.0/8 orlonger reject; # One identifier ("route-filter") with route-filter 127.0.0.0/8 orlonger reject; # multiple values. route-filter 128.0.0.0/16 orlonger reject; route-filter 149.20.64.0/24 orlonger reject; route-filter 172.16.0.0/12 orlonger reject; route-filter 191.255.0.0/16 orlonger reject; } then { # Statement under "term" (statement-name). next term; # Identifier (identifier-name). } } }
Wenn Sie eine ASCII-Konfigurationsdatei erstellen, geben Sie Anweisungen und Bezeichner an. Jede Anweisung hat einen bevorzugten Stil, und die CLI verwendet diesen Stil, wenn die Konfiguration als Reaktion auf einen Konfigurationsmodusbefehl angezeigt wird.show
Sie können Anweisungen und Bezeichner auf eine der folgenden Arten angeben:
-
Anweisung gefolgt von Bezeichnern:
statement-name identifier-name [...] identifier-name value [...];
-
Anweisung gefolgt von Bezeichnern in geschweiften Klammern:
statement-name { identifier-name; [...] identifier-name value; [...] }
-
Bei einigen sich wiederholenden Bezeichnern können Sie einen Satz geschweifter Klammern für alle Anweisungen verwenden:
statement-name { identifier-name value1; identifier-name value2; }
Durchführen der CLI-Typüberprüfung
Wenn Sie Bezeichner und Werte angeben, führt die CLI eine Typüberprüfung durch, um sicherzustellen, dass die eingegebenen Daten das richtige Format aufweisen. Für eine Anweisung, in der Sie beispielsweise eine IP-Adresse angeben müssen, erfordert die CLI, dass Sie eine Adresse in einem gültigen Format eingeben. Andernfalls gibt eine Fehlermeldung an, was Sie eingeben müssen. listet die Datentypen auf, die von der CLI überprüft werden. Im Folgenden finden Sie Eingabetypen für die CLI-Konfiguration:
Datentyp |
Format |
Beispiele: |
---|---|---|
Name der physischen Schnittstelle (wird in der [ Hierarchie] verwendet) |
|
Correct: Incorrect: |
Vollständiger Schnittstellenname |
|
Correct: Incorrect: |
Vollständiger oder abgekürzter Schnittstellenname (wird an anderen Stellen als der [ hierarchy verwendet) |
|
Correct: |
IP-Adresse |
|
, , , Correct: Sample translations:
|
IP-Adresse (Zielpräfix) und Präfixlänge |
|
Correct: Sample translations:
|
Adresse der Internationalen Organisation für Normung (ISO) |
|
Correct: Sample translations:
|
OSPF-Bereichskennung (ID) |
|
Correct: Sample translations:
|
Informationen zum Laden einer Konfiguration aus einer Datei
In den folgenden Beispielen wird das Laden einer Konfiguration aus einer Datei veranschaulicht.
Hochladen einer Konfigurationsdatei
Sie können eine Konfigurationsdatei auf Ihrem lokalen System erstellen, die Datei auf das Gerät kopieren und die Datei dann in die CLI laden. Nachdem Sie die Konfigurationsdatei geladen haben, können Sie sie bestätigen, um die Konfiguration auf dem Gerät zu aktivieren. Sie können die Konfiguration auch interaktiv über die CLI bearbeiten und zu einem späteren Zeitpunkt bestätigen.
So laden Sie eine Konfigurationsdatei von Ihrem lokalen System hoch:
Um die Ergebnisse der Konfigurationsschritte anzuzeigen, bevor Sie die Konfiguration bestätigen, geben Sie den Befehl an der Benutzeraufforderung ein.show
Um diese Änderungen in die aktive Konfiguration zu übernehmen, geben Sie den Befehl an der Benutzeraufforderung ein.commit
Sie können die Konfiguration auch interaktiv über die CLI bearbeiten und zu einem späteren Zeitpunkt bestätigen.
Laden von JSON-Konfigurationsdaten mit ungeordneten Listeneinträgen
Das Junos-Schema definiert bestimmte Konfigurationsobjekte als Listen. In JSON-Konfigurationsdaten wird eine Listeninstanz als Name/Array-Paar codiert, und die Arrayelemente sind JSON-Objekte. Im Allgemeinen ist die Reihenfolge der Elemente in einem JSON-codierten Listeneintrag willkürlich, da JSON-Objekte grundsätzlich ungeordnete Sammlungen von Elementen sind. Das Junos-Schema erfordert jedoch, dass Listenschlüssel vor allen anderen gleichgeordneten Schlüsseln in einem Listeneintrag stehen und in der vom Schema angegebenen Reihenfolge angezeigt werden.
Das Objekt auf der Hierarchieebene ist z. B. eine Liste, wobei der Listenschlüssel ist, der jeden Benutzer eindeutig identifiziert.user
[edit system login]
name
list user { key name; description "Username"; uses login-user-object; }
In den folgenden Beispielkonfigurationsdaten ist der Listenschlüssel () das erste Element für jeden Benutzer.name
Wenn Sie JSON-Konfigurationsdaten laden, erfordern Junos-Geräte standardmäßig, dass die Listenschlüssel allen anderen gleichgeordneten Schlüsseln innerhalb eines Listeneintrags vorangestellt sind und in der durch das Schema angegebenen Reihenfolge angezeigt werden.
{ "configuration" : { "system" : { "login" : { "user" : [ { "name" : "operator", "class" : "operator", "uid" : 3001 }, { "name" : "security-admin", "class" : "super-user", "uid" : 3002 } ] } } } }
Junos-Geräte bieten zwei Optionen zum Laden von JSON-Konfigurationsdaten, die ungeordnete Listeneinträge enthalten, d. h. Listeneinträge, bei denen der Listenschlüssel nicht unbedingt das erste Element ist.
-
Verwenden Sie den Befehl operational mode, um JSON-Konfigurationsdaten mit geordneten Listeneinträgen zu erzeugen, bevor Sie die Daten auf das Gerät laden.
request system convert-json-configuration
-
Konfigurieren Sie die Anweisung auf Hierarchieebene .
reorder-list-keys
[edit system configuration input format json]
Nachdem Sie die Anweisung konfiguriert haben, können Sie JSON-Konfigurationsdaten mit ungeordneten Listeneinträgen laden, und das Gerät ordnet die Listenschlüssel neu an, wie es das Junos-Schema während des Ladevorgangs erfordert.
Wenn Sie die Anweisung konfigurieren, kann das Analysieren der Konfiguration durch den Ladevorgang erheblich länger dauern, abhängig von der Größe der Konfiguration und der Anzahl der Listen.reorder-list-keys
Für große Konfigurationen oder Konfigurationen mit vielen Listen empfehlen wir daher, den Befehl anstelle der Anweisung zu verwenden.request system convert-json-configuration
reorder-list-keys
Angenommen, die Datei enthält die folgende JSON-Konfiguration.user-data.json
Wenn Sie versuchten, die Konfiguration zu laden, gab das Gerät einen Ladefehler aus, da der Listenschlüssel nicht das erste Element in diesem Listeneintrag ist.admin2
name
user@host> file show /var/tmp/user-data.json { "configuration" : { "system" : { "login" : { "user" : [ { "name" : "admin1", "class" : "super-user", "uid" : 3003 }, { "class" : "super-user", "name" : "admin2", "uid" : 3004 } ] } } } }
Wenn Sie den Befehl mit der vorherigen Datei als Eingabe verwenden, generiert der Befehl die angegebene Ausgabedatei mit JSON-Konfigurationsdaten, die das Junos-Gerät während des Ladevorgangs analysieren kann.request system convert-json-configuration
user@host> request system convert-json-configuration /var/tmp/user-data.json output-filename user-data-ordered.json user@host> file show user-data-ordered.json { "configuration":{ "system":{ "login":{ "user":[ { "name":"admin1", "class":"super-user", "uid":3003 }, { "name":"admin2", "class":"super-user", "uid":3004 } ] } } } }
Alternativ können Sie die Konfigurationsanweisung konfigurieren.reorder-list-keys
user@host# set system configuration input format json reorder-list-keys user@host# commit
Nachdem Sie die Anweisung konfiguriert haben, können Sie die ursprüngliche JSON-Konfigurationsdatei mit ungeordneten Listeneinträgen laden, und das Gerät verarbeitet die Listeneinträge, wenn es die Konfiguration analysiert.
user@host# load merge json /var/tmp/user-data.json load complete