[英]Paramiko check login timeout of SSH Server
我想看看如果用戶未登錄,ssh服務器關閉連接需要多長時間。
我到目前為止有什么
self.sshobj = paramiko.SSHClient()
self.sshobj.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.sshobj.connect("192.168.0.1", port=22, username="test", password="test")
self.channel = self.sshobj.invoke_shell()
但是問題是我不想登錄,而sshobj.connect卻要登錄,我想進入登錄屏幕。
我想檢查服務器關閉連接需要多長時間。
有什么辦法可以通過paramiko做到這一點嗎?
您不一定需要paramiko來檢查LoginGraceTime
但是由於您特別要求它:
注意: banner_timeout
只是對等ssh橫幅響應的超時。
注: timeout
實際上是一個套接字讀取超時, none
是無超時。 使用此設置檢查的超時時間。
self.sshobj = paramiko.SSHClient()
self.sshobj.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
self.sshobj.connect("192.168.0.1", port=22, look_for_keys=False, timeout=None, banner_timeout=5)
except paramiko.ssh_exception.SSHException, se:
# paramiko raises SSHException('No authentication methods available',) since we did not specify any auth methods. socket stays open.
pass
ts_start = time.time()
try:
self.channel = self.sshobj.invoke_shell()
except EOFError, e:
# EOFError is raised when peer terminates session.
pass
print time.time()-ts_start
您甚至No authentication methods available
通過使用NOP
覆蓋self.sshobj._auth
來擺脫第一個try_catch
for No authentication methods available
的No authentication methods available
。 以下是對第一個變體的一些更改:
def noauth(username, password, pkey, key_filenames, allow_agent,
look_for_keys, gss_auth, gss_kex, gss_deleg_creds, gss_host): pass
...
sshobj._auth = noauth
sshobj.connect("192.168.0.1", port=22, look_for_keys=False, timeout=None, banner_timeout=5)
...
但是,正如最初提到的,您甚至不需要paramiko來測試此超時,因為一旦交換橫幅, LoginGraceTime
就會像服務器端套接字讀取超時LoginGraceTime
觸發。 因此,您只需要建立一個TCP連接,發送一個偽造的ssh標語,然后等到遠端斷開連接:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.0.1", 22))
s.sendall("SSH-2.0-MyPythonSSHProbingClient")
s.settimeout(5*60) # hard-limit
print s.recv(500) # remote banner
ts_start = time.time()
if not s.recv(100):
# exits when remote site closes connection, or raises socket.timeout when hard-limit is hit.
print time.time()-ts_start
else:
raise Exception("whoop, something's gone wrong")
non-paramiko變體甚至更准確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.