- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 paramiko 通过 SSH 连接到通过另一台计算机隧道传输的计算机在 Python 中,但我遇到了一些奇怪的问题。
我在 /.ssh/config
中的配置文件如下所示:
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
我的 python 代码是这样的:
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 上运行它。
最佳答案
我认为您可以坚持第一个解决方案。只是你需要更改你的代理命令并确保你的跳转主机已安装 nc
我使用这样的代理命令
proxy = paramiko.ProxyCommand("ssh -o StrictHostKeyChecking=no jumphostIP nc targethostIP 22")
我发现这个 WiKi 非常有用 http://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts只需使用实际值,而不是像我所做的那样使用 %h 和 %p。
关于python - paramiko.Proxycommand 无法设置套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21609443/
使用 OpenSSH,我已经设置了我的 /etc/ssh/ssh_config有一个 ProxyCommand所以所有 SSH 连接都通过该代理。 /etc/ssh/ssh_config : Host
由于防火墙限制,我需要能够通过另一台主机连接到另一台主机。我目前能够使用 ProxyCommand 选项成功连接。但现在我需要在连接到目标主机后更改用户,从 user_one 更改为 user_two
我试图配置SSH配置以简化工作流程,但在这里遇到了麻烦。 我有一个跳转主机,需要sudo ssh才能访问所有其他计算机。 我发现,如果我运行ssh -tt jumphost sudo ssh dest
我正在尝试使用计算机 B 上的 key 通过计算机 B 建立隧道,从计算机 A 到计算机 C。我已经共享了从计算机 A 到计算机 B 以及从计算机 B 到计算机 C 的 key 这适用于计算机 A,无
我在使用 ssh proxy 命令时遇到了一些问题。代理上的身份验证工作正常,但是当我想登录到远程主机时它失败了。问题似乎是,代理尝试使用我的本地 rsa_key 登录,而不是使用存储在代理上的 ke
我正在尝试使用 paramiko 通过 SSH 连接到通过另一台计算机隧道传输的计算机在 Python 中,但我遇到了一些奇怪的问题。 我在 /.ssh/config 中的配置文件如下所示: Host
我有一个在防火墙后面的 git 服务器。我可以从家里访问防火墙,但不能访问 git 服务器。但是,我可以从防火墙访问 git 服务器(也就是说,我可以 SSH 到防火墙,然后再从防火墙 SSH 到 g
在我们的环境中,我们有几台服务器在生产中。每次我想搜索某些东西时,它可能在 4 个不同的服务器中的 1 个中。 我正在创建一个脚本来自动执行此搜索,以便我直接知道涉及哪个服务器。 我正在通过 jump
我只是尝试使用 PuTTY 与我的服务器建立 SSH 连接。这些服务器仅允许来自另一个特定服务器(下面示例中的“MySshProxyingServer”)的传入 SSH 连接。 使用 Linux,使用
我有一个网络服务器 WWW1 和一个前置代理 PRX。我使用 SSH ProxyCommand 通过 PRX(私有(private) + 公共(public) IP)连接到 WWW1 的内部 IP(私
我在 /etc/hosts 中定义了一个主机称为 web1 .有一个名为 store 的 docker 容器. 在我的工作站上,我可以通过 ssh 进入机器并执行命令以交互方式进入容器 ssh -t
我打算实现一个 golang 版本的 ssh 客户端来通过堡垒连接到目标服务器。但不幸的是,我在替换 nc 代理时失败了。 在我本地的 ssh 配置: Host bastion HostNam
我看过一些关于 .ssh/config 和 proxycommand 的博客 现在下一个命令之间有什么区别 ProxyCommand ssh proxyserver -W [%h]:%pProxyCo
我想通过另一台使用 ruby 的计算机连接到远程计算机。 这个方案如下: 本地 -> 代理 -> 远程 我有这段代码可以直接访问: require 'net/ssh' Net::SSH.start
我尝试使用 SSH ProxyCommand 通过跳转框连接到服务器时未成功。我的配置在下面,我正在运行这个命令: ssh 10.0.2.54 -F ssh.config -vv Host x.x.x
我有一台服务器(例如,内部服务器)只能从另一台服务器(例如,外部服务器)访问,而不是运行 Node 服务器的服务器。但是, Node 服务器可以到达外部服务器。从命令行使用 ssh 时,我可以使用 P
我是一名优秀的程序员,十分优秀!