大佬教程收集整理的这篇文章主要介绍了在存在影响主机使用的复杂“~/.ssh/config` 的情况下连接 parmiko 客户端,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写 python 脚本,用于下载某些 C++ 项目的依赖项。脚本必须列出远程机器上的目录/文件,然后选择最新版本的依赖项。 逻辑有点复杂,而且已经有一些东西可以用WIDows Drive在windows上运行,所以我只需要采用python脚本在linux上运行即可。
出于安全原因,这些依赖项可通过 ssh 连接使用(构建在 docker 上执行)。
在这个问题的第一个版本中,我在使用 paramiko 从 python 代码建立连接时遇到了问题。更长时间的调查表明 paramiko 库默认不读取 ssh_config 导致连接问题。这已经解决了。
遵循python脚本既丑陋又脆弱:
import paramiko
import sys
from scp import SCPClIEnt
from stat import S_ISDIR,S_ISREG
import os.path
default_host = 'server.company.com'
config_file = os.path.expanduser('~/.ssh/config')
config = paramiko.config.SSHConfig.from_path(config_filE)
server_data = config.lookup(default_host)
print(server_data)
clIEnt = paramiko.SSHClIEnt()
clIEnt.load_system_host_keys()
clIEnt.set_missing_host_key_policy(paramiko.WarningPolicy())
print('before connect')
clIEnt.connect(server_data.get('hostname',default_host),port=server_data.get('port',NonE),username=server_data.get('user',NonE))
print('before open_sftp')
ftp = clIEnt.open_sftp()
print('before Listdir_attr')
for i in ftp.Listdir_attr('/mnt/CoredevPublic'):
print(f"file: {i.filename} {S_ISDIR(i.st_modE) and 'dir' or 'file'}")
在初始版本中,我无法连接到服务器,因为未考虑 config
文件。
上面的代码有效,但很烂。我不喜欢我必须从 clIEnt.connect
手动传递给 server_data
值的事实。我不能只使用 clIEnt.connect(**server_data)
,因为字典中的元素与 clIEnt.connect
中的参数名称不匹配。所以这很丑陋。这也是脆弱的,因为我使用了解决我的问题所需的 server_data
元素,所以如果机器配置发生变化,此代码将失败,因为某些值没有被覆盖。最好让这段代码更加灵活和通用。
paramiko.SSHClIEnt
并正确使用配置文件?暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的在存在影响主机使用的复杂“~/.ssh/config` 的情况下连接 parmiko 客户端全部内容,希望文章能够帮你解决在存在影响主机使用的复杂“~/.ssh/config` 的情况下连接 parmiko 客户端所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。