Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
network:shell_scripting [05.07.2018 09:52] 127.0.0.1 Externe Bearbeitung |
network:shell_scripting [18.02.2019 13:01] (aktuell) richard |
||
---|---|---|---|
Zeile 180: | Zeile 180: | ||
print (testVar) | print (testVar) | ||
</file> | </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> |