2022.04.07  

【paramiko】 encountered RSA key, expected OPENSSH key、private key file is encrypted

Python,  Paramiko    

下記処理を実行した際に、hoge2サーバーでは接続が行えたにもかかわらず、hoge1サーバーでは次のエラーが発生し接続が行えませんでした。

エラー内容

# client.connect(look_for_keys=False)なし
Exception has occurred: PasswordRequiredException
private key file is encrypted
# client.connect(look_for_keys=False)あり
Exception has occurred: SSHException
encountered RSA key, expected OPENSSH key

client.connect(look_for_keys=False)を設定すると認証に失敗した際のエラーメッセージがより正確になるらしい。参考

実行コード

import paramiko

IP = '10.22.33.123'
PORT = '22'
USER = 'centos'
KEY_FILE = '/Users/user/.ssh/mykey.pem'

client = paramiko.SSHClient()

# Are you sure you want to continue connecting (yes/no)? 対応
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

client.connect(IP, PORT, USER, pkey=rsa_key, timeout=5.0, look_for_keys=False)

stdin, stdout, stderr = ssh.exec_command(ls -l ')

原因

接続先サーバー側でsha1アルゴリズムが使用されていたため。
(sha1が使われていたのは、おそらくOpenSSHのバージョンが古いのが原因)

$ # hoge1サーバー(sha1)
$ ssh-keygen -lf ~/.ssh/authorized_keys 
2048 SHA256:J7g4d2bhfn7I1/ufnvBiOqrccmjxggPf8Cd4aPOsTr8 centos@xxx (RSA)
$ # hoge2サーバー(sha2)
$ ssh-keygen -lf ~/.ssh/authorized_keys 
2048 6b:8f:8f:12:b0:4a:ee:c5:83:b1:ac:cd:12:aa:ee:21  centos@xxx(RSA)

対応

client.connect関数に引数disabled_algorithms=dict(pubkeys=['rsa-sha2-256', 'rsa-sha2-512'])を追加する

import paramiko

IP = '10.22.33.123'
PORT = '22'
USER = 'centos'
KEY_FILE = '/Users/user/.ssh/mykey.pem'

client = paramiko.SSHClient()

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

client.connect(IP, PORT, USER, KEY_FILE, timeout=5.0, look_for_keys=False,
                          disabled_algorithms=dict(pubkeys=['rsa-sha2-256', 'rsa-sha2-512']))
                          # ↑ 処理を追加

stdin, stdout, stderr = ssh.exec_command(ls -l ')
コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信