web-dev-qa-db-ja.com

paramiko-秘密鍵で接続-有効なOPENSSH秘密/公開鍵ファイルではありません

私はこれに対する解決策を見つけようとしていますが、私が間違っていることを理解できません。

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

えっ?

6
whoisearth

Paramiko rsa key authentication setup runningを実行しています。これが私がしたことの要約です:

  • 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にあります。これの一部またはすべてが役立つことを願っています。

7
AS Mackay

Ssh-keygenを使用して、id_rsaをRSAタイプの秘密鍵に変換できます。私は同じような状況に直面し、それは私のために働いた。

「BEGIN OPENSSH PRIVATE KEY」を「BEGIN RSA PRIVATE KEY」に変換するには

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
12
ahirapara