Paramiko - 使用私钥连接 - 不是有效的 OPENSSH private/public 密钥文件
Paramiko - connect with private key - not a valid OPENSSH private/public key file
我正在努力寻找解决方案,但无法理解我做错了什么。
在我的 Linux 服务器上,我有 运行 以下命令:
ssh-keygen -t rsa
这生成了一个 id_rsa
和 id_rsa.pub
文件。
然后我将它们都复制到本地并尝试运行以下代码:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('myserver', username='myuser', key_filename='id_rsa')
sftp = ssh.open_sftp()
sftp.chdir('/path/to/file')
sftp.get(file, os.path.join(tmp_dir, '{0}.existing-{1}'.format('myfile', current_datetime)))
except Exception, err:
logging.debug(err)
logging.info('Error connecting to Host')
我在日志中收到以下错误:
2017-08-22 22:41:54,486 Switch to new keys ...
2017-08-22 22:41:54,502 Adding ssh-ed25519 host key for myserver.domain.com: 51ac2fe875499371256dd8c5a132f394
2017-08-22 22:41:54,502 Trying key 7688e32d30edb2c94bfe39be9897004f from id_rsa
2017-08-22 22:41:54,532 userauth is OK
2017-08-22 22:41:54,549 Authentication (publickey) failed.
2017-08-22 22:41:54,563 not a valid OPENSSH private key file
2017-08-22 22:41:54,563 Error connecting to Host
2017-08-22 22:41:54,657 EOF in transport thread
我错过了什么吗?这是一个有效的 OPENSSH 私钥文件。
编辑 - 如果我使用 id_rsa.pub
我得到以下信息:
2017-08-22 22:58:09,631 Kex agreed: ecdh-sha2-nistp256
2017-08-22 22:58:09,631 HostKey agreed: ssh-ed25519
2017-08-22 22:58:09,631 Cipher agreed: aes128-ctr
2017-08-22 22:58:09,631 MAC agreed: hmac-sha2-256
2017-08-22 22:58:09,631 Compression agreed: none
2017-08-22 22:58:09,694 kex engine KexNistp256 specified hash_algo <built-in function openssl_sha256>
2017-08-22 22:58:09,710 Switch to new keys ...
2017-08-22 22:58:09,726 Adding ssh-ed25519 host key for myserver.domain.com: 51ac2fe875499371256dd8c5a132f394
2017-08-22 22:58:09,726 not a valid OPENSSH private key file
2017-08-22 22:58:09,726 Error connecting to Host
2017-08-22 22:58:09,819 EOF in transport thread
为什么?
我有一个 Paramiko RSA 密钥身份验证设置 运行ning。以下是我所做的总结:
运行 ssh-keygen -t rsa 生成 id_rsa 和 id_rsa.pub 文件
将 id_rsa.pub 的内容复制到 ~/.ssh/authorized_keys(在
目标系统)
将 id_rsa(私有)密钥文件复制到客户端机器上
(在目标上,我在 .ssh/ 上有模式 755,在 authorized_keys 上有模式 644)
以下代码运行是使用 Paramiko 的登录:
import logging
import paramiko
logger = paramiko.util.logging.getLogger()
hdlr = logging.FileHandler('app.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
k = paramiko.RSAKey.from_private_key_file('id_rsa')
ssh.connect('160.100.28.216', username='edwards', pkey = k)
sftp = ssh.open_sftp()
sftp.chdir('/home/edwards')
except Exception, err:
logging.debug(err)
logging.info('Error connecting to Host')
在 app.log 文件中看到以下内容:
2017-08-23 16:52:33,154 INFO Connected (version 2.0, client OpenSSH_6.6.1)
2017-08-23 16:52:46,926 INFO Authentication (publickey) successful!
2017-08-23 16:52:47,203 INFO [chan 0] Opened sftp connection (server version 3)
(注意:Paramiko 客户端正在使用私钥文件。)这一切都在 Python 2.7.
您可以使用 ssh-keygen 将 id_rsa 转换为 RSA 类型的私钥。我遇到过类似的情况,它对我有用。
要转换“BEGIN OPENSSH PRIVATE KEY”为“BEGIN RSA PRIVATE KEY”:
ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
我正在努力寻找解决方案,但无法理解我做错了什么。
在我的 Linux 服务器上,我有 运行 以下命令:
ssh-keygen -t rsa
这生成了一个 id_rsa
和 id_rsa.pub
文件。
然后我将它们都复制到本地并尝试运行以下代码:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('myserver', username='myuser', key_filename='id_rsa')
sftp = ssh.open_sftp()
sftp.chdir('/path/to/file')
sftp.get(file, os.path.join(tmp_dir, '{0}.existing-{1}'.format('myfile', current_datetime)))
except Exception, err:
logging.debug(err)
logging.info('Error connecting to Host')
我在日志中收到以下错误:
2017-08-22 22:41:54,486 Switch to new keys ...
2017-08-22 22:41:54,502 Adding ssh-ed25519 host key for myserver.domain.com: 51ac2fe875499371256dd8c5a132f394
2017-08-22 22:41:54,502 Trying key 7688e32d30edb2c94bfe39be9897004f from id_rsa
2017-08-22 22:41:54,532 userauth is OK
2017-08-22 22:41:54,549 Authentication (publickey) failed.
2017-08-22 22:41:54,563 not a valid OPENSSH private key file
2017-08-22 22:41:54,563 Error connecting to Host
2017-08-22 22:41:54,657 EOF in transport thread
我错过了什么吗?这是一个有效的 OPENSSH 私钥文件。
编辑 - 如果我使用 id_rsa.pub
我得到以下信息:
2017-08-22 22:58:09,631 Kex agreed: ecdh-sha2-nistp256
2017-08-22 22:58:09,631 HostKey agreed: ssh-ed25519
2017-08-22 22:58:09,631 Cipher agreed: aes128-ctr
2017-08-22 22:58:09,631 MAC agreed: hmac-sha2-256
2017-08-22 22:58:09,631 Compression agreed: none
2017-08-22 22:58:09,694 kex engine KexNistp256 specified hash_algo <built-in function openssl_sha256>
2017-08-22 22:58:09,710 Switch to new keys ...
2017-08-22 22:58:09,726 Adding ssh-ed25519 host key for myserver.domain.com: 51ac2fe875499371256dd8c5a132f394
2017-08-22 22:58:09,726 not a valid OPENSSH private key file
2017-08-22 22:58:09,726 Error connecting to Host
2017-08-22 22:58:09,819 EOF in transport thread
为什么?
我有一个 Paramiko RSA 密钥身份验证设置 运行ning。以下是我所做的总结:
运行 ssh-keygen -t rsa 生成 id_rsa 和 id_rsa.pub 文件
将 id_rsa.pub 的内容复制到 ~/.ssh/authorized_keys(在 目标系统)
将 id_rsa(私有)密钥文件复制到客户端机器上
(在目标上,我在 .ssh/ 上有模式 755,在 authorized_keys 上有模式 644)
以下代码运行是使用 Paramiko 的登录:
import logging
import paramiko
logger = paramiko.util.logging.getLogger()
hdlr = logging.FileHandler('app.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
k = paramiko.RSAKey.from_private_key_file('id_rsa')
ssh.connect('160.100.28.216', username='edwards', pkey = k)
sftp = ssh.open_sftp()
sftp.chdir('/home/edwards')
except Exception, err:
logging.debug(err)
logging.info('Error connecting to Host')
在 app.log 文件中看到以下内容:
2017-08-23 16:52:33,154 INFO Connected (version 2.0, client OpenSSH_6.6.1)
2017-08-23 16:52:46,926 INFO Authentication (publickey) successful!
2017-08-23 16:52:47,203 INFO [chan 0] Opened sftp connection (server version 3)
(注意:Paramiko 客户端正在使用私钥文件。)这一切都在 Python 2.7.
您可以使用 ssh-keygen 将 id_rsa 转换为 RSA 类型的私钥。我遇到过类似的情况,它对我有用。
要转换“BEGIN OPENSSH PRIVATE KEY”为“BEGIN RSA PRIVATE KEY”:
ssh-keygen -p -m PEM -f ~/.ssh/id_rsa