Benutzer-Werkzeuge

Webseiten-Werkzeuge


network:shell_scripting

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
network:shell_scripting [02.05.2016 11:00]
richard
network:shell_scripting [18.02.2019 13:01] (aktuell)
richard
Zeile 70: Zeile 70:
 # Default-Route setzen (Standard-Gateway 10.0.0.1) # Default-Route setzen (Standard-Gateway 10.0.0.1)
 sudo ip route add default via 10.0.0.1 sudo ip route add default via 10.0.0.1
 +</​file>​
 +
 +==== Beispiel: telnet-Verbindung zu einem Switch aufbauen ====
 +
 +Mit dem folgenden Script wird eine Verbindung mit Hilfe von ''​nc''​((nc:​ netcat)) zu einer IP-Adresse aufgebaut.
 +Im Anschluss werden bis zum ''​EOF''​((EOF:​ end of file)) die einzelnen Befehle zeilenweise übertragen. ​
 +Die folgende Tabelle zeigt die Befehle und ihre Wirkung auf dem Switch:
 +
 +^ Befehl ^ Wirkung auf Switch ^
 +| ''​schueler''​ | Benutzername wird als erstes vom Switch erwartet |
 +| ''​schueler''​ | Passwort für ''​schueler''​ |
 +| ''​system-view''​ | Wechsel in den Konfigurationsmodus |
 +| ''​display vlan''​ | Anzeigen der alten VLAN-Konfiguration |
 +| ''​undo vlan all''​ | Löschen der alten VLAN-Konfiguration |
 +| ''​y''​ | Bestätigung der Löschung |
 +| ''​vlan 2''​ | ''​VLAN-ID 2''​ anlegen durch Wechsel in den ''​vlan-2''​-Bereich |
 +| ''​port Ethernet 1/​0/​1''​ | Port 1/0/1 in ''​VLAN2''​ bringen |
 +| ''​display vlan 2''​ | neue Konfiguration von ''​VLAN2''​ anzeigen |
 +| ''​vlan 3''​ | ''​VLAN-ID 3''​ anlegen durch Wechsel in den ''​vlan-3''​-Bereich |
 +| ''​port Ethernet 1/​0/​2''​ | Port 1/0/2 in ''​VLAN3''​ bringen |
 +| ''​quit''​ | Zurück auf höchste Konfigurationsebene (VLAN verlassen) |
 +| ''​interface Ethernet 1/​0/​5''​ | In Konfigurationsebene von Port 1/0/5 wechseln |
 +| ''​port link-type trunk''​ | Betriebsmodus für aktuellen Port 1/0/5 auf ''​trunk''​ ändern |
 +| ''​port trunk permit vlan 3''​ | Port 1/0/5 tagged zu ''​VLAN3''​ hinzufügen |
 +| ''​port trunk permit vlan 2''​ | Port 1/0/5 tagged zu ''​VLAN2''​ hinzufügen |
 +| ''​quit''​ | Zurück auf höchste Konfigurationsebene (Port verlassen) |
 +| ''​quit''​ | Verbindung zu Switch beenden |
 +
 +<file bash telsession.sh>​
 +#!/bin/bash
 +# netcat (kurz nc) ist ein Kommandozeilen-Tool,​ mit dem Verbindungen zu entfernten Systemen aufgebaut werden können.
 +# Verwendung: nc <​IP-Adresse>​ <​PORT>​
 +nc 192.168.33.61 23 <<'​EOF'​
 +schueler
 +schueler
 +system-view
 +display vlan
 +undo vlan all
 +y
 +vlan 2
 +port Ethernet 1/0/1
 +display vlan 2
 +vlan 3
 +port Ethernet 1/0/2
 +quit
 +interface Ethernet 1/0/5
 +port link-type trunk
 +port trunk permit vlan 3
 +port trunk permit vlan 2
 +quit
 +quit
 +EOF
 </​file>​ </​file>​
  
Zeile 86: Zeile 138:
 Hier können auch andere Profile ausgewählt werden. Dazu muss ''​default''​ durch den entsprechenden Profilnamen ersetzt werden. Hier können auch andere Profile ausgewählt werden. Dazu muss ''​default''​ durch den entsprechenden Profilnamen ersetzt werden.
  
-<file bash>+<file bash luckybackup.sh>
 #!/bin/bash #!/bin/bash
 # 1. Pfad zum USB-Stick anpassen (hier /​media/​USERNAME/​USB_STICK_NAME # 1. Pfad zum USB-Stick anpassen (hier /​media/​USERNAME/​USB_STICK_NAME
Zeile 100: Zeile 152:
  ​luckybackup --silent default  ​luckybackup --silent default
 </​file>​ </​file>​
 +
 +===== Python =====
 +
 +Eine weitere sehr mächtige Variante Prozesse zu automatisieren,​ liegt in der Verwendung eine Script-Sprache wie ''​python''​ oder ''​perl''​.
 +
 +<file python python_sample.py>​
 +#​!/​usr/​bin/​python
 +# coding: utf8
 +
 +# Import für Call https://​docs.python.org/​2/​library/​subprocess.html
 +from subprocess import call
 +
 +# Import für os.system https://​docs.python.org/​2/​library/​os.html
 +import os
 +
 +call(["​ls",​ "​-l"​])
 +
 +os.system("​ps aux | grep -i apache > output_file"​)
 +
 +
 +# User anlegen
 +def createUser(name,​username,​password):​
 +    encPass = crypt.crypt(password,"​22"​) ​  
 +    return ​ os.system("​useradd -p "​+encPass+ " -s "+ "/​bin/​bash "+ "-d "+ "/​home/"​ + username+ " -m "+ " -c \""​+ name+"​\"​ " + username)
 +
 +testVar = raw_input("​Ask user for something."​)
 +print (testVar)
 +</​file>​
 +
 +
 +===== ssh mit python =====
 +
 +Es gibt mehrere Implementierungen für ssh in python. Das Module ''​paramiko''​ wird hier vorgestellt.
 +
 +Installation:​
 +<​code>​
 +python3 -m pip --proxy https://​192.168.21.91:​3128 install --user paramiko
 +</​code>​
 +
 +Beispiel-Script:​
 +<file python ssh_paramiko_test.py>​
 +# https://​daanlenaerts.com/​blog/​2016/​01/​02/​python-and-ssh-sending-commands-over-ssh-using-paramiko/​
 +
 +import paramiko
 +USERNAME='​schueler'​
 +PASSWORD='​schueler'​ #kritisch bei offenen Strukturen; hier besser keys verwenden
 +HOST='​192.168.33.80'​
 +
 +ssh = paramiko.client.SSHClient()
 +ssh.set_missing_host_key_policy(
 + ​paramiko.AutoAddPolicy())
 +
 +ssh.connect(HOST,​ username=USERNAME,​ password=PASSWORD)
 +stdin, stdout, stderr = ssh.exec_command('​ip address print'​)
 +while not stdout.channel.exit_status_ready():​
 +                # Print data when available
 +                if stdout.channel.recv_ready():​
 +                    alldata = stdout.channel.recv(1024)
 +                    prevdata = b"​1"​
 +                    while prevdata:
 +                        prevdata = stdout.channel.recv(1024)
 +                        alldata += prevdata
 + 
 +                    print("​1:"​+str(alldata,​ "​utf8"​))
 +
 +stdin, stdout, stderr = ssh.exec_command('​ip address add address=22.0.0.1/​24 interface=ether4'​)
 +while not stdout.channel.exit_status_ready():​
 +                # Print data when available
 +                if stdout.channel.recv_ready():​
 +                    alldata = stdout.channel.recv(1024)
 +                    prevdata = b"​1"​
 +                    while prevdata:
 +                        prevdata = stdout.channel.recv(1024)
 +                        alldata += prevdata
 + 
 +                    print("​2:"​+str(alldata,​ "​utf8"​))
 +</​file>​
 +
 +<file python ssh_ssh_test.py>​
 +from ssh.session import Session
 +from ssh import options
 +# Username für Login
 +USERNAME= '​schueler'​
 +# Zielmaschine hier mikrotik
 +HOST = '​192.168.33.80'​
 +
 +# Aufbau der ssh-Session
 +s = Session()
 +s.options_set(options.HOST,​ HOST)
 +s.connect()
 +
 +# Login mit USERNAME
 +s.userauth_agent(USERNAME)
 +
 +chan = s.channel_new()
 +chan.open_session()
 +chan.request_exec('​ip address print'​)
 +"""​
 +# Ausgabe der Antwort
 +size, data = chan.read()
 +while size > 0:
 +    print(data.strip())
 +    size, data = chan.read()
 +"""​
 +chan.request_exec('​ip address add address=30.0.0.1/​24 interface=ether3'​)
 +chan.request_exec('​ip address print'​)
 +
 +# Ausgabe der Antwort
 +size, data = chan.read()
 +while size > 0:
 +    print(data.strip())
 +    size, data = chan.read()
 +
 +chan.close()
 +</​file>​
 +
 +
 +===== ssh über bash =====
 +
 +<code bash ssh_test.sh>​
 +#!/bin/bash
 +
 +user="​schueler"​
 +host="​192.168.33.80"​
 +ip_addr="​40.0.0.1"​
 +
 +ssh $user@$host<<​EOF
 +/ip address print
 +/ip address add address=${ip_addr}/​24 comment="​MyNetz"​ interface=ether5
 +/ip address print
 +EOF
 +</​code>​
network/shell_scripting.1462179629.txt.gz · Zuletzt geändert: 05.07.2018 09:52 (Externe Bearbeitung)