【问题标题】:Paramiko on Windows with Cygwin OpenSSH doesn't find known_hosts files使用 Cygwin OpenSSH 在 Windows 上的 Paramiko 找不到 known_hosts 文件
【发布时间】:2019-04-04 12:03:35
【问题描述】:

我有一个设置,我想通过带有私钥/公钥的无密码 SSH 从 Windows7 虚拟机连接到 Linux 服务器。

SSH 连接通过 Cygwin 终端正常工作。

使用 Paramiko,如果我接受缺少的主机密钥,我可以从我的客户端连接到我的主机,但如果我尝试使用 known_hosts 代替,我会收到错误:

在 known_hosts 中找不到服务器 XXX。

Paramiko 是否能够在 Windows/Cygwin 中读取 known_hosts 文件?我能以某种方式提供路径吗?

我的.ssh 文件夹位于C:\cygwin64\home\<user>\.ssh 下。

非常感谢您的帮助,
托马斯

【问题讨论】:

  • 请注意,“无密码连接”“known_hosts文件”无关。
  • 你的 cygwin .ssh 文件夹在哪里?
  • 你好马丁,谢谢你的回答。我意识到无密码与它无关,我只是提到它,因为它是我的实际用例。否则我可以使用我当前的设置,自动添加丢失的主机文件并提供密码。如果我只自动添加丢失的主机文件而不提供密码,我会收到“没有可用的身份验证方法”错误。
  • 我的 .ssh 文件夹位于 C:\cygwin64\home\\.ssh

标签: python ssh cygwin paramiko openssh


【解决方案1】:

我假设您使用的是SSHClient.load_system_host_keys

默认情况下,这些方法会加载os.path.expanduser('~/.ssh/known_hosts') 文件。与您的C:\cygwin64\home\<user>\.ssh 位置不匹配的内容,如在Windows 上os.path.expanduser 使用USERPROFILE 环境变量,它指向C:\Users\<user>


您可以通过以下方式解决此问题:

  • 以某种方式更改 Cygwin 配置(但它可能会破坏其他东西);
  • 或创建从C:\Users\<user>\.sshC:\cygwin64\home\<user>\.ssh 的目录连接(可能是最便携的解决方案);
  • 或在对SSHClient.load_system_host_keys 的调用中明确指定filename 参数(不可移植);
  • 或在运行 Python 脚本之前将 HOME 环境变量设置为指向 C:\cygwin64\home\<user> - os.path.expanduser 更喜欢 HOME 而不是 USERPROFILE - Windows 不使用 HOME(可能会破坏其他东西)。

【讨论】:

  • 创建目录连接不起作用,因为路径扩展为 'C:\\Users\\/.ssh/known_hosts',所以我最终直接提供了文件名。由于 Paramiko 对私钥文件有同样的问题,因此必须设置 key_filename 参数以提供私钥位置。感谢您的帮助,现在可以正常使用了
  • 好的。虽然我仍然不明白为什么目录连接不起作用。
猜你喜欢
  • 1970-01-01
  • 2015-08-13
  • 2013-06-29
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2017-01-24
相关资源
最近更新 更多