如果您对通过提供交互式目标服务器选择的跳转主机使用PythonParamiko进行连接感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于通过提供交互式目标服务器选择的跳转主机使
如果您对通过提供交互式目标服务器选择的跳转主机使用 Python Paramiko 进行连接感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于通过提供交互式目标服务器选择的跳转主机使用 Python Paramiko 进行连接的详细内容,并且为您提供关于#paramiko# 解决安装 paramiko 的问题记录、AttributeError: 模块“paramiko.win_pageant”在使用来自 Windows Server 的 Paramiko 进行连接时没有属性“can_talk_to_agent”、cube.js 通过presto-gateway 进行连接、KeystoneJS 关系,如何使用一组 id 进行连接的有价值信息。
本文目录一览:- 通过提供交互式目标服务器选择的跳转主机使用 Python Paramiko 进行连接
- #paramiko# 解决安装 paramiko 的问题记录
- AttributeError: 模块“paramiko.win_pageant”在使用来自 Windows Server 的 Paramiko 进行连接时没有属性“can_talk_to_agent”
- cube.js 通过presto-gateway 进行连接
- KeystoneJS 关系,如何使用一组 id 进行连接
通过提供交互式目标服务器选择的跳转主机使用 Python Paramiko 进行连接
如何解决通过提供交互式目标服务器选择的跳转主机使用 Python Paramiko 进行连接
我正在尝试通过跳转服务器使用 SSH 协议连接到服务器。当我使用协议通过终端连接时,跳转服务器会打开一个 shell 并从提供的可用服务器列表中询问服务器编号,然后是用户或密码。使用库 Paramiko。
我的代码:
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(
hostname="server_ip",username="user",password="pass",look_for_keys=False,allow_agent=False
)
com=''1''
stdin,stdout,stderr = client.exec_command(com)
data = stdout.read() + stderr.read()
print(data.decode(''utf-8''))
我收到消息:
目标无效。
我在跳转服务器上的 shell 是这样的:
解决方法
您的跳转服务器可能仅在交互式 shell 会话中显示选择。因此,您将不得不使用 SSHClient.invoke_shell
,否则在自动化连接时这不是一件好事。
另见What is the difference between exec_command and send with invoke_shell() on Paramiko?
#paramiko# 解决安装 paramiko 的问题记录
在 debian 上安装出了些问题,导致 import paramiko 失败,解决方法:
先 pip 安装
apt-get install libssl-dev
pip install cffi --upgrade
apt-get install libffi-dev
pip install cryptography --upgrade
AttributeError: 模块“paramiko.win_pageant”在使用来自 Windows Server 的 Paramiko 进行连接时没有属性“can_talk_to_agent”
如何解决AttributeError: 模块“paramiko.win_pageant”在使用来自 Windows Server 的 Paramiko 进行连接时没有属性“can_talk_to_agent”
我目前正在开发一个程序,该程序尝试联系许多运行 Cisco IOS 的路由器以获取其当前配置。我正在尝试使用 Paramiko 模块的 SSHClient
对象来实现这一点:
def get_config(file_path,ip,ip_number):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,port=22,username="user",password="pw",look_for_keys=False,timeout=None)
stdin,stdout,stderr = ssh.exec_command("show running-config \\n")
之后,配置被写入子文件夹内的特定文件,该文件的名称为变量 ip_number
。由于这是通过一百多个路由器完成的,因此我尝试使用线程模块来加快进程。当我一次使用更多线程时,我不断遇到的问题开始更频繁地发生,因此我以这种方式使程序一次仅使用 14 个线程(服务器在 14 核 cpu 上运行):
amount_ip_blocks = int(len(ip_list))/14
if len(ip_list) - 14*amount_ip_blocks != 0:
amount_remaining_ips = len(ip_list) - 14*amount_ip_blocks
for j in range (0,amount_ip_blocks):
threads = []
for i in range (j*14,j*14 + 14):
thread = threading.Thread(target=get_config,args=(path,ip_list[i],i,))
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
最后,对剩余的 IP 执行相同的操作。
现在,当处理第一个 14 个 IP 块时,这段代码在不同线程(并不总是线程 1)上同时给我零到四次以下异常:
Exception in thread Thread-1:
Traceback (most recent call last):
File "D:\\Program Files\\Python\\lib\\threading.py",line 932,in _bootstrap_inner
self.run()
File "D:\\Program Files\\Python\\lib\\threading.py",line 870,in run
self._target(*self._args,**self._kwargs)
File "D:\\location_of_my_program\\config_getter.py",line 99,in get_config
ssh.connect(ip,timeout=None)
File "D:\\Program Files\\Python\\lib\\site-packages\\paramiko-2.7.2-py3.8.egg\\paramiko\\client.py",line 435,in connect
File "D:\\Program Files\\Python\\lib\\site-packages\\paramiko-2.7.2-py3.8.egg\\paramiko\\client.py",line 691,in _auth
File "D:\\Program Files\\Python\\lib\\site-packages\\paramiko-2.7.2-py3.8.egg\\paramiko\\agent.py",line 372,in __init__
AttributeError: module ''paramiko.win_pageant'' has no attribute ''can_talk_to_agent''
我曾尝试在网上查找此异常,但找不到任何内容。我还尝试查看 paramiko 的代码,看看它对我是否有意义,但无济于事。最后,我尝试调整 IP 块的大小,较小的块似乎不太经常导致问题,如果发生,它总是在第一个 IP 块上发生。经过大量实验,我无法推断出任何规律性。 有没有办法解决这个问题?或者根本不可能同时/在同一个程序中使用paramiko运行多个SSH连接? 或者更好的是,有人知道这个问题是如何发生的吗?
解决方法
我没有解决方案,但可能是一种解决方法。由于您似乎没有使用代理,您是否尝试将其关闭?
在 SSHClient.connect
调用中设置 allow_agent=False
。
cube.js 通过presto-gateway 进行连接
cube.js 对于presto 的支持是通过presto-client 刚好简单修改了一个可以支持presto-gateway 连接的
以下是一个简单的集成,以及关于集成中原有的一些修改
环境准备
- docker-compose 文件
version: "3"
services:
proxy:
image: dalongrong/presto-gateway:1.6.1
ports:
- "8888:8888"
- "8082:8082"
- "8083:8083"
build: ./
volumes:
- "./config.yml.template:/config.yml.template"
presto1:
image: starburstdata/presto
ports:
- "8080:8080"
presto2:
image: starburstdata/presto
ports:
- "8081:8080"
- presto-gateway 配置
requestRouter:
port: 8888
name: prestoRouter
cacheDir: /var/log/prestoproxy/cache
historySize: 1000
backends:
- localPort: 8082
name: presto1
proxyTo: http://presto1:8080
routingGroup: adhoc
- localPort: 8083
name: presto2
proxyTo: http://presto2:8080
routingGroup: scheduled
server:
applicationConnectors:
- type: http
port: 8090
adminConnectors:
- type: http
port: 8091
notifier:
smtpHost: localhost
smtpPort: 587
sender: presto-gw-monitor-noreply@lyft.com
recipients:
- prestodev@yourorg.com
modules:
- com.lyft.data.gateway.module.ProxyBackendProviderModule
- com.lyft.data.gateway.module.GatewayProviderModule
- com.lyft.data.gateway.module.NotifierModule
managedApps:
- com.lyft.data.gateway.GatewayManagedApp
- com.lyft.data.gateway.ActiveClusterMonitor
# Logging settings.
logging:
# The default level of all loggers. Can be OFF,ERROR,WARN,INFO,DEBUG,TRACE,or ALL.
level: INFO
# Logger-specific levels.
loggers:
com.lyft: DEBUG
appenders:
- type: console
- type: file
currentLogFilename: /var/log/prestoproxy/prestoproxy-java.log
archivedLogFilenamePattern: /var/log/prestoproxy/prestoproxy-java-%d{yyyy-MM-dd}-%i.log.gz
archivedFileCount: 7
timeZone: UTC
maxFileSize: 100MB
cube.js presto 项目
- 初始化
cubejs create -d presto mypresto