skrypt lub aplikacja wykokonujący polecenie
skrypt lub aplikacja wykokonujący polecenie
Dzień dobry.
Czy ma ktoś pomysł na wykonanie polecenia:
conf t
interface fa 0/1
shut
end
exit
Założenie jest takie że połączenie z przełącznikiem musi zostać nawiązane przez ssh z hosta z systemem Windows.
Użytkownik uruchomi skrypt lub aplikację która wyłączy lub włączy interfejs przełącznika.
Parę lat wstecz bawiłem się czymś takim przy wyłączaniu kiosku multimedialnego. Korzystałem z aplikacji Kitty, tam były na sztywno wpisane dane do autoryzacji i polecenie bodajże poweroff. Wtedy nie było problemu bo aplikacja wysyłała pojedynczą komendę i po sprawie, teraz sytuacja zmusza mnie do wysłania kilku linijek więcej. Chciał bym to w jakiś sposób zautomatyzować.
Pozdrawiam
Jakub
Czy ma ktoś pomysł na wykonanie polecenia:
conf t
interface fa 0/1
shut
end
exit
Założenie jest takie że połączenie z przełącznikiem musi zostać nawiązane przez ssh z hosta z systemem Windows.
Użytkownik uruchomi skrypt lub aplikację która wyłączy lub włączy interfejs przełącznika.
Parę lat wstecz bawiłem się czymś takim przy wyłączaniu kiosku multimedialnego. Korzystałem z aplikacji Kitty, tam były na sztywno wpisane dane do autoryzacji i polecenie bodajże poweroff. Wtedy nie było problemu bo aplikacja wysyłała pojedynczą komendę i po sprawie, teraz sytuacja zmusza mnie do wysłania kilku linijek więcej. Chciał bym to w jakiś sposób zautomatyzować.
Pozdrawiam
Jakub
Paramiko SSH i skrypt w Pythonie.
Nie jestem w stanie znaleźć w tej chwili tutoriala, w którym był na to gotowiec, ale gdzieś na Pynet powinno być.
e: trochę inne rozwiązanie: http://www.electricmonk.nl/log/2014/07/ ... nd-expect/
https://www.linickx.com/automating-cisc ... -c-r-a-ssh
https://pynet.twb-tech.com/blog/python/ ... part1.html
Nie jestem w stanie znaleźć w tej chwili tutoriala, w którym był na to gotowiec, ale gdzieś na Pynet powinno być.
e: trochę inne rozwiązanie: http://www.electricmonk.nl/log/2014/07/ ... nd-expect/
https://www.linickx.com/automating-cisc ... -c-r-a-ssh
https://pynet.twb-tech.com/blog/python/ ... part1.html
-
- wannabe
- Posty: 581
- Rejestracja: 27 wrz 2007, 01:13
Kod: Zaznacz cały
#!/usr/bin/env python
import paramiko
import time
host = '1.1.1.1'
user = 'admin'
pass = 'password'
interface = 'fa0/1'
connect = paramiko.SSHClient()
connect.set_missing_host_key_policy(paramiko.AutoAddPolicy())
connect.connect(host, username=user, password=pass, look_for_keys=False, allow_agent=False)
shell = connect.invoke_shell()
shell.send('\n')
time.sleep(2)
shell.send('conf t\n')
time.sleep(2)
shell.send('int %s\n') % interface
time.sleep(2)
shell.send('shut\n')
time.sleep(2)
shell.send('end\n')
connect.close()
jesli masz lenia to musisz znalezc kogos kto ci to napisze ja rybki dawac nie bede tylko wedke na start
brakuje sprawdzenia w petli czy otrzymales odpowiedni prompt. Dopiero jak masz pewnosc ze zczytasz calosc promptu do buforu wydajesz komende. Sprawdzasz znowu prompt na exec mode, komenda i sprawdzasz na config prompt.
Z racji tego ze prompy sa rozne w CLI, to wypadaloby napisac funkcje i jako parametr podac jej prompt i wywolac przed kazdym wprowadzeniem komend.
Dalej pinokio idzie sam
Z racji tego ze prompy sa rozne w CLI, to wypadaloby napisac funkcje i jako parametr podac jej prompt i wywolac przed kazdym wprowadzeniem komend.
Kod: Zaznacz cały
def do_enable(self):
output = ''
self.remote_conn.send('enable\n')
output = self.wait_for_password()
if not "ERROR" in output:
if opt.enable:
self.remote_conn.send(opt.enable+'\n')
output = self.wait_for_enable()
if not "ERROR" in output:
print "[+] Enable password correct"
temp = output.splitlines()
self.prompt = temp[-1]
print self.prompt
if '#' in self.prompt:
#print "True returned"
return True
else:
print "[-] Enable failed"
return False
if '#' in self.prompt:
return True
'''Core method used to check prompts each time when command is sent
Includes while loop that recievs packets and check prompt '''
def wait_for_output(self,new_prompt):
complete = False
temp = ''
packet = ''
while not complete:
packet += self.remote_conn.recv(65535)
#print "IN WAIT FOR OUTPUT PROMPT: ",self.prompt
'''!!!! print packet important for debbuging problems !!!'''
#print packet
if new_prompt in packet:
self.prompt = new_prompt
#print "NEW_PROMPT:",self.prompt
complete = True
if self.prompt in packet:
#print "Error"
#print "SELF PROMPT:",self.prompt
complete = True
#print packet
return packet
'''Method used to check if "Password" appears after enable command'''
def wait_for_password(self):
complete = False
temp = ''
packet = ''
#print "wait_for_password"
while not complete:
packet += self.remote_conn.recv(65535)
#print "PACKET: ",packet
if "Password" in packet:
complete = True
if "%" in packet:
complete = True
return "ERROR"
if "#" in packet:
complete =True
#print packet
return packet
'''Method checks prompt for enable password'''
def wait_for_enable(self):
complete = False
temp = ''
packet = ''
#print "wait_for_password"
while not complete:
packet += self.remote_conn.recv(65535)
#print "PACKET: ",packet
if "#" in packet:
complete = True
if ">" in packet:
complete = True
return "ERROR"
return packet
Osobiście uważam paramiko za jeden z najbardziej przereklamowanych modułów pythonowych - jak już się zejdzie do optymalizacji (tutaj kolega już zaproponował serię sleepów po 2 sekundy, ot taka natura paramiko, że lubi sleep'y) i rozpozna naturę send/recv i operowania na paramikowych buforach, to nie wygląda to tak dobrze.excubitor pisze:Paramiko SSH i skrypt w Pythonie.
-- M.
-
- wannabe
- Posty: 581
- Rejestracja: 27 wrz 2007, 01:13
Re:
W tym co napisalem brakuje duzooo rzeczy ale nie chcialem zniechecac autora wiec napisalem najprostszy mozliwy kod w ktorym widac co sie dzieje i pokazac ze juz dzieki paru linijkom mozna cos zdizalac (taka zacheta do nauki )horac pisze:brakuje sprawdzenia w petli czy otrzymales odpowiedni prompt.
-
- wannabe
- Posty: 581
- Rejestracja: 27 wrz 2007, 01:13
Re:
Generalnie nie uzywam Paramiko bezposrednio , pisze w 100% pod junipera i uzywam jego bibliotek ale i tak mam swiadomosc ze paramiko jest w nich wykorzystywane. Kiedys bawilem sie pexpectem ale paramiko jest duzo lepsze.mzb pisze:Osobiście uważam paramiko za jeden z najbardziej przereklamowanych modułów pythonowych - jak już się zejdzie do optymalizacji (tutaj kolega już zaproponował serię sleepów po 2 sekundy, ot taka natura paramiko, że lubi sleep'y) i rozpozna naturę send/recv i operowania na paramikowych buforach, to nie wygląda to tak dobrze.excubitor pisze:Paramiko SSH i skrypt w Pythonie.
-- M.
Na bank sa jakies gotowe biblioteki wspomagajace takie taski jak configuracje itp (vide pyez od junipera) ale to i tak wszystko ma Paramiko za dependency jednym slowem bez Paramiko ani rusz
Re: skrypt lub aplikacja wykokonujący polecenie
zamiast Pythona, probowałeś napisać zwykły skrypt batchowy w oparciu o "plink" z pakietu Putty?
Re: skrypt lub aplikacja wykokonujący polecenie
Celna rada. Dzięki.
Skrypt batchowy był by dobry. Popatrze o co chodzi z "plink".
Skrypt batchowy był by dobry. Popatrze o co chodzi z "plink".
-
- wannabe
- Posty: 581
- Rejestracja: 27 wrz 2007, 01:13
Re: skrypt lub aplikacja wykokonujący polecenie
Ehh NIeee To jest slaby pomyslmierztom pisze:zamiast Pythona, probowałeś napisać zwykły skrypt batchowy w oparciu o "plink" z pakietu Putty?
Re: skrypt lub aplikacja wykokonujący polecenie
To ja dorzuce od siebie jeszcze dwie mozliwosci, mtputty - tutaj na szybko mozesz zdefiniowac komendy ktore chcesz wykonac (tools->send script). Albo mozesz uzyc linuxowego expecta, ponizej masz przyklad:
Kod: Zaznacz cały
#!/usr/bin/expect
set user user
set workingdir .
set pass haslo
set LOG [open "$workingdir/RESULT" a]
set RTR [open "$workingdir/RTR_LIST" r]
set PROMPT "#|]"
set timeout 60000
match_max -d 2000000
while {[gets $RTR router] != -1} {
if {[ string range $router 0 0 ] != "#"} {
set timeout 30
#set LOG [open "$workingdir/RESULT" a]
spawn ssh $user@$router
expect "password:"
send "$pass\r"
expect -re $PROMPT
send "sh ver | inc System image \r"
expect -re $PROMPT
puts $LOG "$expect_out(buffer)"
send "sh ver | inc uptime \r"
expect -re $PROMPT
puts $LOG "$expect_out(buffer)"
send "quit \r"
}
}
close $RTR; close $LOG
Re: skrypt lub aplikacja wykokonujący polecenie
A jak ma wyglądać skrypt w mtputty? Zaczyna mi się plątać
Re: skrypt lub aplikacja wykokonujący polecenie
Dobra. Wszystko gra jak potrzeba. Dziękuje za pomoc.
Powyższego pytania nie było
Problem rozwiązany. Zwycięzcą zostaje mtputty.
Powyższego pytania nie było
Problem rozwiązany. Zwycięzcą zostaje mtputty.