Benutzer-Werkzeuge

Webseiten-Werkzeuge


network:shell_scripting

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
network:shell_scripting [02.05.2016 11:00] richardnetwork:shell_scripting [18.02.2019 13:01] 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.txt · Zuletzt geändert: 30.04.2023 15:57 von richard

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki