próbuję uruchomić kod w interakcji z SSH Poprzez Pexpect i Brute wymuszanie haseł SSH z Pxssh sekcje z rozdziałem 2 Violent Python. Przy użyciu zarówno child.expect()
jak i pxssh
otrzymuję podobne błędy EOF.EOF podczas korzystania pexpect i pxssh
Running tych poleceń z konsoli Pythona:
import pexpect
connStr = "ssh [email protected]"
child = pexpect.spawn(connStr)
ret = child.expect([pexpect.TIMEOUT, ssh_newkey, "[P|p]assword:"])
uzyskać ten wynik:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pexpect.py", li
ne 1316, in expect
return self.expect_list(compiled_pattern_list, timeout, searchwindowsize)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pexpect.py", li
ne 1330, in expect_list
return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pexpect.py", li
ne 1401, in expect_loop
raise EOF (str(e) + '\n' + str(self))
EOF: End Of File (EOF) in read_nonblocking(). Empty string style platform.
<pexpect.spawn object at 0x10180c550>
version: 2.4 ($Revision: 516 $)
command: /usr/bin/ssh
args: ['/usr/bin/ssh', '[email protected]']
searcher: searcher_re:
0: TIMEOUT
1: re.compile("Are you sure you want to continue connecting")
2: re.compile("[P|p]assword:")
buffer (last 100 chars):
before (last 100 chars):
after: <class 'pexpect.EOF'>
match: None
match_index: None
exitstatus: 255
flag_eof: True
pid: 12122
child_fd: 4
closed: False
timeout: 30
delimiter: <class 'pexpect.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1
i prowadzeniu tych poleceń, używając pxssh
:
import pxssh
s = pxssh.pxssh()
s.login("127.0.0.1", "root", "1234")
otrzymuję ten wyjścia :
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pxssh.py", line
196, in login
i = self.expect(["(?i)are you sure you want to continue connecting", original_prompt, "(?i)(?:pas
sword)|(?:passphrase for key)", "(?i)permission denied", "(?i)terminal type", TIMEOUT, "(?i)connectio
n closed by remote host"], timeout=login_timeout)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pexpect.py", li
ne 1316, in expect
return self.expect_list(compiled_pattern_list, timeout, searchwindowsize)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pexpect.py", li
ne 1330, in expect_list
return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pexpect.py", li
ne 1401, in expect_loop
raise EOF (str(e) + '\n' + str(self))
EOF: End Of File (EOF) in read_nonblocking(). Empty string style platform.
<pxssh.pxssh object at 0x1016bff90>
version: 2.4 ($Revision: 516 $)
command: /usr/bin/ssh
args: ['/usr/bin/ssh', '-q', '-l', 'root', '127.0.0.1']
searcher: searcher_re:
0: re.compile("(?i)are you sure you want to continue connecting")
1: re.compile("[#$]")
2: re.compile("(?i)(?:password)|(?:passphrase for key)")
3: re.compile("(?i)permission denied")
4: re.compile("(?i)terminal type")
5: TIMEOUT
6: re.compile("(?i)connection closed by remote host")
buffer (last 100 chars):
before (last 100 chars):
after: <class 'pexpect.EOF'>
match: None
match_index: None
exitstatus: None
flag_eof: True
pid: 12136
child_fd: 3
closed: False
timeout: 30
delimiter: <class 'pexpect.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1
Otrzymuję podobne wyniki, gdy zastępuję 127.0.0.1 z innymi hostami i próbuję różnych kombinacji nazwy użytkownika i hasła.
Sugeruje użycie przy użyciu expect(pexpect.EOF)
, aby uniknąć generowania wyjątku EOF. Rzeczywiście, gdy wykonuję następujące czynności:
connStr = "ssh [email protected]"
child = pexpect.spawn(connStr)
print child.expect(pexpect.EOF)
Wynikiem jest 0
.
Ale następujące pytania pozostają:
- Jestem zdezorientowany przez składni książki:
child.expect([pexpect.TIMEOUT, ssh_newkey, "[P|p]assword:"])
. Dlaczego przekazujemy listę doexpect()
? Co ma zawierać ta lista? - Jak korzystać z
expect(pexpect.EOF)
, zgodnie z instrukcją, podczas korzystania z pxssh? - Dlaczego kod w książce nie działa poprawnie? Czy coś zmieniło się w bibliotece pexpect od czasu publikacji książki? Czy to dlatego, że jestem na OS X?
Mam Python 2.7 i pexpect 2.4 działa na Mac OS X 10.8.4.
Być może dodano publiczny klucz ssh na komputerze, który próbuje się połączyć z hostem. Czy jesteś pewien, że przy próbie połączenia pojawia się pytanie o hasło? – orezvani
Mam także do czynienia z tym samym problemem. Czy jest na to jakieś rozwiązanie ? – Nikole