Я пытаюсь подключить сервер Mongo DB через сервер переходов в моем скрипте python, используя Paramico на экземпляре AWS.
Позвольте мне объяснить, как я подключаюсь к серверу Mongo DB на терминале на AWS:
$ssh -i Key.pem harman@51.8.11.205 # I ssh on Jump server with this command
После входа в систему на сервере Jump я использую следующую команду для SSH на сервере Mongo DB:
$ssh ctpms-lmini1-Jsct1
здесь я не требую никакой аутентификации.Нет имени пользователя, пароля или ключа не требуется.
Теперь я должен установить такое же соединение с скриптами Python.Вот мой
Сценарий:
#Connect to Jump Server
Jump_client = paramiko.SSHClient()
Jump_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
Jump_client.connect(hostname='51.8.11.205', port=22,
username='harman', key_filename='key.pem', banner_timeout=10)
Я успешно могу подключиться к серверу Jump и запустить:
Jump_client.exec_command('ls')
Установить канал между сервером Mongo dbи сервер Jump:
chan = client.get_transport()
dest_addr = ('11.16.19.23', 22) #Mongo DB server IP#
local_addr = ('51.8.11.205', 22) #Jump server IP#
mongochannel = chan.open_channel("direct-tcpip", dest_addr,local_addr)
Это также было успешно, mongochannel возвращает следующее:
<paramiko.Channel 0 (open) window=2097152 in-buffer=23 -> <paramiko.Transport at 0x7a952f90L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>
Теперь я пытаюсь использовать mongochannel в качестве сокета и создаю новый сеанс, но получаю ошибку:
mongo_client = paramiko.SSHClient()
mongo_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
mongo_client.load_system_host_keys()
mongo_client.connect(hostname='11.16.19.23', sock=mongochannel)
Вот ошибка:
EOFError Traceback (most recent call last)
<ipython-input-26-2000cff93e10> in <module>()
2 client1.set_missing_host_key_policy(paramiko.AutoAddPolicy())
3 client1.load_system_host_keys()
----> 4 client1.connect(hostname='11.16.19.23', sock=vmchannel)
/usr/local/lib/python2.7/dist-packages/paramiko/client.pyc in connect(self, hostname, port, username, password, pkey, key_filename, timeout, allow_agent, look_for_keys, compress, sock, gss_auth, gss_kex, gss_deleg_creds, gss_host, banner_timeout, auth_timeout, gss_trust_dns, passphrase)
395 sec_opts.key_types = [keytype] + other_types
396
--> 397 t.start_client(timeout=timeout)
398
399 # If GSS-API Key Exchange is performed we are not required to check the
/usr/local/lib/python2.7/dist-packages/paramiko/transport.pyc in start_client(self, event, timeout)
585 e = self.get_exception()
586 if e is not None:
--> 587 raise e
588 raise SSHException("Negotiation failed.")
589 if event.is_set() or (
EOFError:
Как я упоминал ранее, я не требую никакого имени пользователя, пароля или ключа для mongodb.Пожалуйста, предложите.
Я также пытался использовать jumpssh для этой цели, но он также не работал. Вот код:
from jumpssh import SSHSession
gateway_session = SSHSession('51.8.11.205', 'test_user', proxy_transport=None, private_key_file='test.pem',
port = 22, пароль = None, missing_host_key_policy = None, сжимать= False)
Соединение с сервером Jump работает нормально, но следующий код для сервера mongodb выдает ошибку:
remote_session = gateway_session.get_remote_session('11.16.19.23','test_user')
Ошибка:
--------------------------------------------------------------------------
ConnectionError Traceback (most recent call last)
<ipython-input-66-10b1b39a1f86> in <module>()
----> 1 remote_session = gateway_session.get_remote_session('11.16.19.23','harman')
/usr/local/lib/python2.7/dist-packages/jumpssh/session.pyc in get_remote_session(self, host, username, retry, private_key_file, port, password, retry_interval, compress)
496 password=password,
497 compress=compress).open(retry=retry,
--> 498 retry_interval=retry_interval)
499
500 # keep reference to opened session, to be able to reuse it later
/usr/local/lib/python2.7/dist-packages/jumpssh/session.pyc in open(self, retry, retry_interval)
159 else:
160 raise exception.ConnectionError("Unable to connect to '%s:%s' with user '%s'"
--> 161 % (self.host, self.port, self.username), original_exception=ex)
162
163 # Get the client's transport
ConnectionError: Unable to connect to '11.16.19.23:22' with user 'test_user': [Errno 104] Connection reset by peer
Обратите внимание, я также пытался использоватьтот же файл pem для сервера mongodb, который я использую для jumpserver, но он не помог.
Пожалуйста, предоставьте свои предложения для решения этой проблемы.
С уважением, Бхарат