我有一个设置,我想通过使用私钥/公钥的无密码 SSH 从 Windows7 虚拟机连接到 Linux 服务器。
SSH 连接通过 Cygwin 终端工作正常。
使用 Paramiko,如果我接受缺少的主机 key ,我可以从客户端连接到我的主机,但如果我尝试使用 known_hosts
相反,我收到错误:
Server XXX not found in known_hosts.
Paramiko 是否能够阅读 known_hosts
Windows/Cygwin 中的文件?我可以以某种方式提供路径吗?
我的.ssh
文件夹位于C:\cygwin64\home\<user>\.ssh
下.
非常感谢您的帮助,
托马斯
最佳答案
我假设您正在使用 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
(可能是最便携的解决方案); - 或明确指定
filename
调用SSHClient.load_system_host_keys
时的参数(不可携带); - 或设置
HOME
环境变量指向C:\cygwin64\home\<user>
在运行 Python 脚本之前 -os.path.expanduser
更喜欢HOME
至USERPROFILE
- Windows 不使用HOME
(可以破坏其他东西)。
关于python - Windows 上使用 Cygwin OpenSSH 的 Paramiko 找不到known_hosts 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53081374/