Объяснение хостов / IP-адресов и портов, участвующих в реализации прыжкового хоста (переадресация портов) с Paramiko - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь установить соединение с хостом для прыжков через Paramiko.

Это настройки, которые у меня есть в ~/.ssh/config

Host jump.csail.mit.edu
  GSSAPIAuthentication yes
  GSSAPIKeyExchange yes
  VerifyHostKeyDNS yes
Host *.csail.mit.edu !jump.csail.mit.edu 128.52.* 128.30.* 128.31.*
  ProxyCommand ssh -W %h:%p jump.csail.mit.edu
  GSSAPIAuthentication yes
  GSSAPIDelegateCredentials yes
  GSSAPIKeyExchange yes

, и это работает, если я подключаюсь с терминала.

Я также нашел этот код для соединения с хостом Paramiko jump, и мне интересно, что мне следует установить jumpbox_public_addr и jumpbox_private_addr на основе вышеуказанных настроек конфигурации s sh?

import os
import paramiko

ssh_key_filename = os.getenv('HOME') + '/.ssh/id_rsa'

jumpbox_public_addr = '168.128.52.199'
jumpbox_private_addr = '10.0.5.10'
target_addr = '10.0.5.20'

jumpbox=paramiko.SSHClient()
jumpbox.set_missing_host_key_policy(paramiko.AutoAddPolicy())
jumpbox.connect(jumpbox_public_addr, username='root', key_filename=ssh_key_filename)

jumpbox_transport = jumpbox.get_transport()
src_addr = (jumpbox_private_addr, 22)
dest_addr = (target_addr, 22)
jumpbox_channel = jumpbox_transport.open_channel("direct-tcpip", dest_addr, src_addr)

target=paramiko.SSHClient()
target.set_missing_host_key_policy(paramiko.AutoAddPolicy())
target.connect(target_addr, username='root', key_filename=ssh_key_filename, sock=jumpbox_channel)

stdin, stdout, stderr = target.exec_command("ifconfig")
for line in stdout.read().split(b'\n'):
  print(str(line))

target.close()
jumpbox.close()

Спасибо!

1 Ответ

1 голос
/ 13 апреля 2020

jumpbox_public_addr - это адрес вашего сервера переходов, который должен быть jump.csail.mit.edu.

jumpbox_private_addr (src_addr параметр Transport.open_channel) - адрес источника соединение от jump.csail.mit.edu до вашего сервера назначения. В общем, вы не заботитесь об этом (так как вас не интересует адрес источника и порт большинства TCP-соединений). И это определенно не должен быть порт 22. Далее следует указать серверу использовать значения по умолчанию:

src_addr = ("0.0.0.0", 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...