import socket import paramiko import threading import sys host_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_FAILED_ADMINISTRAIVELY_PROHIBITED def check_auth_password(self,username,password): if (username == ‘justin‘) and (password == ‘lovesthepython‘): return paramiko.AUTH_SUCCESSFUL return paramiko.AUTH_FAILED server = 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.Trasport(client) bhSession.add_server_key(host_key) server = Server() try: bhSession.start_server(server=server) except paramiko.SSHException,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)
本文出自 “专注php” 博客,请务必保留此出处http://jingshanls.blog.51cto.com/3357095/1766002
python 里面的 使用bh_ssh server 的写法
原文:http://jingshanls.blog.51cto.com/3357095/1766002