Я пытаюсь подключиться через SSH к туннелю компьютера через другой компьютер, используя paramiko в Python, но у меня возникают некоторые странные проблемы. Мой конфигурационный файл в /.ssh/config
выглядит следующим образом:paramiko.Proxycommand не удается установить сокет
Host remoteA
HostName 169.254.1.1
User root
IdentityFile ~/.ssh/id_dss.openssh.remoteA
ForwardX11 no
StrictHostKeyChecking no
ForwardAgent yes
UserKnownHostsFile /dev/null
Host remoteB
User root
IdentityFile ~/.ssh/id_dss.openssh.remoteB
ForwardX11 no
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
ProxyCommand ssh -W 169.254.1.2:22 remoteA
И мой питон такой код:
from paramiko import SSHClient, SSHConfig, SSHException
import getpass
import paramiko
def getSSHConnection(hostName):
config = SSHConfig()
user = getpass.getuser()
config.parse(open('C:/Users/' + user +'/.ssh/config'))
host=config.lookup(hostName)
# setup SSH client
client = SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#Check for proxy settings
try:
print host ['proxycommand']
proxy = paramiko.ProxyCommand(host['proxycommand'])
except:
proxy = None
#Setup the SSH connection
try:
if (proxy is None):
client.connect(host['hostname'],22, username=host['user'],key_filename=host['identityfile'])
else:
client.connect(host['hostname'],22, username=host['user'], key_filename=host['identityfile'], sock=proxy)
except SSHException, ex:
print ex
return client
ssh_client = getSSHConnection('remoteA')
# run a command
print "\nRun a command"
cmd = 'ps aux'
stdin, stdout, stderr = ssh_client.exec_command(cmd)
print stdout.read()
ssh_client = getSSHConnection('remoteB')
# run a command
print "\nRun a command"
cmd = 'ps aux'
stdin, stdout, stderr = ssh_client.exec_command(cmd)
print stdout.read()
Сначала при подключении к remoteA это работает отлично, но потом при подключении к remoteB он выходит из строя в уровень: proxy = paramiko.ProxyCommand(host['proxycommand'])
.
File "C:\Python27\lib\site-packages\paramiko\client.py", line 291, in connect
for (family, socktype, proto, canonname, sockaddr) in socket.getaddrinfo(hostname, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
socket.gaierror: [Errno 11004] getaddrinfo failed
В Cygwin, я могу подключиться, используя команду ssh remoteB
, так что я знаю, что конфигурационный файл должен быть в порядке.
Если это делает никакой разницы, я бегу это на Windows 7.
Так что мне удалось обойти мои проблемы, сделав вместо этого порт вперед. – jimmy