Advertisement
Guest User

Untitled

a guest
Aug 27th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. import socket
  2. import paramiko
  3. import threading
  4. import sys
  5. #script args
  6. server_address = sys.argv[1]
  7. server_port = int(sys.argv[2])
  8. server_username = sys.argv[3]
  9. server_password = sys.argv[4]
  10. server_host_key = paramiko.RSAKey(filename="ch2_ssh_server.key")
  11. server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  12. server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  13. #ssh server parameters defined in the class
  14. class Server(paramiko.ServerInterface):
  15. def __init__(self):
  16. self.event = threading.Event()
  17. def check_auth_password(self, username, password):
  18. if username == server_username and password == server_password:
  19. return paramiko.AUTH_SUCCESSFUL
  20. return paramiko.AUTH_FAILED
  21. def check_channel_request(self, kind, chanid):
  22. if kind == "session":
  23. return paramiko.OPEN_SUCCEEDED
  24. return paramiko.OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED
  25. #ssh client handler
  26. def client_handler(client_socket):
  27. try:
  28. #bind client socket to ssh server session and add rsa key
  29. ssh_session = paramiko.Transport(client_socket)
  30. ssh_session.add_server_key(server_host_key)
  31. server = Server()
  32. #start the ssh server and negotiate ssh params
  33. try:
  34. ssh_session.start_server(server=server)
  35. except SSHException as err:
  36. print("[!] SSH Parameters Negotiation Failed")
  37. print("[*] SSH Parameters Negotiation Succeeded")
  38. #authenticate the client
  39. print("[*] Authenticating")
  40. ssh_channel = ssh_session.accept(20)
  41. if ssh_channel == None or not ssh_channel.active:
  42. print("[*] SSH Client Authentication Failure")
  43. ssh_session.close()
  44. else:
  45. print("[*] SSH Client Authenticated")
  46. #ssh channel is established. We can start the shell
  47. #and send commands from input
  48. while not ssh_channel.closed:
  49. try:
  50. command = input("<Shell:#> ").rstrip()
  51. if len(command):
  52. if command != "exit":
  53. ssh_channel.send(command)
  54. print(ssh_channel.recv(1024).decode('utf-8') + '\n')
  55. else:
  56. print("[*] Exiting")
  57. try:
  58. ssh_session.close()
  59. except:
  60. print("[!] Error closing SSH session")
  61. print("[*] SSH session closed")
  62. except Exception as err:
  63. print("[*] Caught Exception: ", str(err))
  64. print("[*] Exiting Script")
  65. try:
  66. ssh_session.close()
  67. except:
  68. print("[!] Error closing SSH session")
  69. print("[*] SSH session closed")
  70. sys.exit(1)
  71. #ssh server bind and listen
  72. try:
  73. server_socket.bind((server_address, server_port))
  74. except:
  75. print(f"[!] Bind Error for SSH Server using {server_address}:{server_socket.getsockname()[1]}")
  76. sys.exit(1)
  77. print(f"[*] Bind Success for SSH Server using {server_address}:{server_socket.getsockname()[1]}")
  78. server_socket.listen(100)
  79. print("[*] Listening")
  80. #Keep ssh server active and accept incoming tcp connections
  81. while True:
  82. client_socket, addr = server_socket.accept()
  83. print(f"[*] Incoming TCP Connection from {addr[0]}:{addr[1]}")
  84. client_handler(client_socket)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement