所以我有这个小脚本:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
from fabric2 import Connection
c = Connection('192.168.1.666',connect_kwargs={"key_filename": "privatekey"})
c.local('touch test3.txt')
#with c.cd('/home/gaiman/productmicro'):
#c.run('git pull origin master')
with c.cd('/home/gaiman/productmicro'):
c.run('touch test4.txt')
问题是我的私钥有问题:
File "/usr/local/lib/python3.6/dist-packages/paramiko/pkey.py", line 289, in _read_private_key
raise SSHException("not a valid " + tag + " private key file")
paramiko.ssh_exception.SSHException: not a valid RSA private key file
但是私钥在脚本的同一个文件夹中。
不明白
所以我需要为织物创建特定的键:
为织物生成密钥:
$ ssh-keygen -t rsa -b 4096
这将使用 RSA 算法生成 SSH 密钥。
并注意将它们正确命名为 id_rsa 任何其他名称都可能对结构造成破坏
我怀疑你的问题是因为 Fabric 目前不支持使用 PKCS#8 等关键文件格式。 Fabric 使用 Paramiko 创建只能使用 PKCS#1 文件的 ssh 连接。这是 Paramiko 中已知的未修复问题。见https://github.com/paramiko/paramiko/issues/1015
PKCS#1 RSA 文件通常如下所示。如果没有“RSA”,那么它可能是 PKCS#8,它是在更现代的 openssl 版本上默认生成的。
-----BEGIN RSA PRIVATE KEY-----
baSe64...
-----END RSA PRIVATE KEY-----
转换很简单:
openssl rsa -in private_pkcs8.pem -out private_pkcs1.pem