-
-
Save dovideh/e0aebf203f9280ead466 to your computer and use it in GitHub Desktop.
| #!/usr/bin/env python | |
| #-*- coding:utf8 -*- | |
| # sources | |
| # 1. https://gist.github.com/tell-k/4943359#file-paramiko_proxycommand_sample-py-L11 | |
| # 2. https://github.com/paramiko/paramiko/pull/97 | |
| # info: http://bitprophet.org/blog/2012/11/05/gateway-solutions/ | |
| # local -> proxy-server -> dest-server | |
| # ~/.ssh/config | |
| # | |
| # Host proxy-server | |
| # User hoge | |
| # HostName proxy.example.com | |
| # IdentityFile ~/.ssh/id_rsa_proxy | |
| # | |
| # Host dest-server | |
| # User fuga | |
| # HostName proxy.example.com | |
| # IdentityFile ~/.ssh/id_rsa_dest | |
| # ProxyCommand ssh proxy-server nc %h %p | |
| # | |
| import os | |
| import sys | |
| import paramiko | |
| def test_client(host_name): | |
| conf = paramiko.SSHConfig() | |
| conf.parse(open(os.path.expanduser('~/.ssh/config'))) | |
| host = conf.lookup(host_name) | |
| client = paramiko.SSHClient() | |
| client.load_system_host_keys() | |
| client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) | |
| client.connect( | |
| host['hostname'], username=host['user'], | |
| # if you have a key file | |
| # key_filename=host['identityfile'], | |
| password='yourpassword', | |
| sock=paramiko.ProxyCommand(host.get('proxycommand')) | |
| ) | |
| stdin, stdout, stderr = client.exec_command('command to run on dest-host') | |
| print stdout.read() | |
| if __name__ == '__main__': | |
| test_client(sys.argv[1]) |
I know nothing about Paramiko and next-to-nothing about proxy commands and this script got me setup in minutes. Thank you!
Thanks a billion. Saved me a lot of time.
This helped me a lot !! Thanks.
Where is host_name in the ssh config file?
How does it pickup host name from the config file is it that host_name is like a keyword for parsing the config file?
Getting error with this code -
paramiko.ssh_exception.ProxyCommandFailure: ProxyCommand("") returned nonzero exit status: Broken pipe
How to solve the above error?
Any help is appreciated here.
Any help is appreciated here.
Try this @JaldhiPandya:
ProxyCommand ssh -q -W %h:%p proxy-server
Any help is appreciated here.
Try this @JaldhiPandya:
ProxyCommand ssh -q -W %h:%p proxy-server
one more thing, here I needed to set the port in my "dest-server".
Hope this helps you
What argument do we need to give in expanduser() in the paramiko-proxy.py code?
I can't get ssh working through a bastion: I always get the error paramiko.ssh_exception.SSHException: Error reading SSH protocol banner.
Did some of you encountered the same issue ?
Ty Ty Ty
Live saver!
Any ideas on passing CertificateFile and identityfile in the proxy commands?
This is what the working ssh config looks like
TCPKeepAlive yes
ServerAliveCountMax 20
ServerAliveInterval 15
Host <vm name>
Hostname <vm ip>
IdentityFile /c/Users/<my ntid>/.ssh/autobahn_rsa
CertificateFile /c/Users/<my ntid>/.ssh/autobahn_rsa-cert.pub
ProxyCommand ssh -qx -i /c/Users/<my ntid>/.ssh/autobahn_rsa -o "CertificateFile /c/Users/<my ntid>/.ssh/autobahn_rsa-cert.pub" -o "TCPKeepAlive yes" -o "ServerAliveCountMax 20" -o "ServerAliveInterval 15" <proxy user>@<proxy host> -W %h:%p
I use this from git bash with a command like this ssh my_ntid@vm_host
I tried the above but getting
Traceback (most recent call last):
File "C:\Users\sfager001\AppData\Local\Programs\Python\Python39\lib\site-packages\paramiko\proxy.py", line 107, in recv
r, w, x = select([self.process.stdout], [], [], select_timeout)
OSError: [WinError 10038] An operation was attempted on something that is not a socket
I don't know how this works, but it worked for me for access a host via a jumphost. I tried the proxycommand and got "paramiko.ssh_exception.SSHException: Error reading SSH protocol banner" error,
This just works...ask long as the workstation has propert ssh config file!
thank you a lot
%d format: a number is required, not str
do you how to solve this problem? it happens at where you create the sock
tho my proxycommand is a little different ProxyCommand nc -x localhost:8158 %h %p