-
Notifications
You must be signed in to change notification settings - Fork 152
-
I have my .ssh/config file configured to allow simple ssh through jump hosts to servers within a protected zone. This allows a command like "ssh fred+10.10.10.10" to take me directly through the jump host to the destination machine. (I don't really understand how this works as I'm not a SSH guru.) This doesn't work through the parallel-ssh library. Is there some other way to make this work? I'm testing this with the sample code just with my jump host address.
Sample SSH config entry:
Host fred
Hostname jumphost-fredHost fred+*
ControlMaster auto
ProxyCommand ssh -T -a$(echo %h |cut -d+ -f1) nc $ (echo %h |cut -d+ -f2) %p 2>/dev/null
ControlPath ~/.ssh/ssh-control_%r@%h:%p
StrictHostKeyChecking no
Test code:
from pssh.clients import ParallelSSHClient
hosts = ['fred+10.14.16.14', 'fred+10.18.19.10']
client = ParallelSSHClient(hosts)
output = client.run_command('uname -a;hostname')
for host_output in output:
for line in host_output.stdout:
print(line)
exit_code = host_output.exit_code
print(exit_code)
Output:
Traceback (most recent call last):
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/single.py", line 272, in _connect
self.sock.connect((host, port))
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_socketcommon.py", line 602, in connect
address = _resolve_addr(self._sock, address)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_socketcommon.py", line 444, in _resolve_addr
r = getaddrinfo(host, None, sock.family)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
return self.pool.apply(_socket.getaddrinfo, args, kwargs)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/pool.py", line 161, in apply
return self.spawn(func, *args, **kwds).get()
File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_compat.py", line 65, in reraise
raise value.with_traceback(tb)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/threadpool.py", line 167, in __run_task
thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -2] Name or service not knownDuring handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/single.py", line 272, in _connect
self.sock.connect((host, port))
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_socketcommon.py", line 602, in connect
address = _resolve_addr(self._sock, address)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_socketcommon.py", line 444, in _resolve_addr
r = getaddrinfo(host, None, sock.family)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
return self.pool.apply(_socket.getaddrinfo, args, kwargs)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/pool.py", line 161, in apply
return self.spawn(func, *args, **kwds).get()
File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_compat.py", line 65, in reraise
raise value.with_traceback(tb)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/threadpool.py", line 167, in __run_task
thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -2] Name or service not knownDuring handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/single.py", line 272, in _connect
self.sock.connect((host, port))
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_socketcommon.py", line 602, in connect
address = _resolve_addr(self._sock, address)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_socketcommon.py", line 444, in _resolve_addr
r = getaddrinfo(host, None, sock.family)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
return self.pool.apply(_socket.getaddrinfo, args, kwargs)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/pool.py", line 161, in apply
return self.spawn(func, *args, **kwds).get()
File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_compat.py", line 65, in reraise
raise value.with_traceback(tb)
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/threadpool.py", line 167, in __run_task
thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -2] Name or service not knownDuring handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "test.py", line 6, in
output = client.run_command('uname -a;hostname')
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/native/parallel.py", line 217, in run_command
return_list=return_list, read_timeout=read_timeout if read_timeout else timeout,
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/parallel.py", line 198, in run_command
return_list=return_list)
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/parallel.py", line 204, in _get_output_from_cmds
finished = joinall(_cmds, raise_error=True)
File "src/gevent/greenlet.py", line 1057, in gevent._gevent_cgreenlet.joinall
File "src/gevent/greenlet.py", line 1073, in gevent._gevent_cgreenlet.joinall
File "src/gevent/greenlet.py", line 371, in gevent._gevent_cgreenlet.Greenlet._raise_exception
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_compat.py", line 65, in reraise
raise value.with_traceback(tb)
File "src/gevent/greenlet.py", line 906, in gevent._gevent_cgreenlet.Greenlet.run
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/parallel.py", line 216, in _get_output_from_greenlet
raise ex
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/parallel.py", line 209, in _get_output_from_greenlet
host_out = cmd.get()
File "src/gevent/greenlet.py", line 803, in gevent._gevent_cgreenlet.Greenlet.get
File "src/gevent/greenlet.py", line 371, in gevent._gevent_cgreenlet.Greenlet._raise_exception
File "/home/mbaker/.local/lib/python3.7/site-packages/gevent/_compat.py", line 65, in reraise
raise value.with_traceback(tb)
File "src/gevent/greenlet.py", line 906, in gevent._gevent_cgreenlet.Greenlet.run
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/parallel.py", line 285, in _run_command
raise ex
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/parallel.py", line 277, in _run_command
_client = self._make_ssh_client(host_i, host)
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/native/parallel.py", line 252, in _make_ssh_client
identity_auth=self.identity_auth,
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/native/single.py", line 129, in init
identity_auth=identity_auth)
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/single.py", line 195, in init
self._init()
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/single.py", line 198, in _init
self._connect(self._host, self._port)
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/single.py", line 278, in _connect
return self._connect(host, port, retries=retries+1)
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/single.py", line 278, in _connect
return self._connect(host, port, retries=retries+1)
File "/home/mbaker/.local/lib/python3.7/site-packages/pssh/clients/base/single.py", line 284, in _connect
raise ex
pssh.exceptions.UnknownHostError: ('Unknown host %s - %s - retry %s/%s', 'fred+10.14.16.14', 'Name or service not known', 3, 3)
Beta Was this translation helpful? Give feedback.
All reactions
Replies: 2 comments 2 replies
-
See documentation on using proxies.
client = ParallelSSHClient(hosts, proxy_host='jumphost')
Beta Was this translation helpful? Give feedback.
All reactions
-
Thanks for that, I guess I should have equated proxy with jump host.
I've still not got it working but I think that's more likely related to our unusual environment than any direct issue with parallel-ssh.
Beta Was this translation helpful? Give feedback.
All reactions
-
There are options for providing proxy user name, key file and etc where proxy auth differs from target host, see documentation.
OpenSSH configs are not read by parallel-ssh.
Beta Was this translation helpful? Give feedback.
All reactions
-
Beta Was this translation helpful? Give feedback.