Last active
July 16, 2024 15:42
-
-
Save dovideh/e0aebf203f9280ead466 to your computer and use it in GitHub Desktop.
Paramiko Connect via proxy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Any ideas on passing CertificateFile and identityfile in the proxy commands?
This is what the working ssh config looks like
I use this from git bash with a command like this
ssh my_ntid@vm_host
I tried the above but getting