使用 Cygwin OpenSSH 在 Windows 上的 Paramiko 找不到 known_hosts 文件
Posted
技术标签:
【中文标题】使用 Cygwin OpenSSH 在 Windows 上的 Paramiko 找不到 known_hosts 文件【英文标题】:Paramiko on Windows with Cygwin OpenSSH doesn't find known_hosts files 【发布时间】: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\我假设您使用的是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>\.ssh
到C:\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\\以上是关于使用 Cygwin OpenSSH 在 Windows 上的 Paramiko 找不到 known_hosts 文件的主要内容,如果未能解决你的问题,请参考以下文章
sh Cygwin GPG代理转发脚本(与Gpg4Win 3一起使用,需要openssh和ssh-pageant)