33

Paramiko ライブラリの使用を開始しようとしていますが、次の単純なプログラムに接続しようとするとすぐにライブラリが例外をスローします。

import paramiko
ssh = paramiko.SSHClient()
ssh.connect('127.0.0.1', username='boatzart', password='mypassword')

私が得るエラーは次のとおりです。

Traceback (most recent call last):
File "test.py", line 6, in <module>
ssh.connect('127.0.0.1')
File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 316, in connect
File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 85, in missing_host_key
paramiko.SSHException: Unknown server 127.0.0.1

これは、どのサーバーを試しても発生します。

4

5 に答える 5

73

私は同じ問題を経験しました、そしてこれが私のためにうまくいった解決策です:

import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('127.0.0.1', username=username, password=password)
stdin, stdout, stderr = client.exec_command('ls -l')

これは、システムオブジェクトまたはローカルHostKeysオブジェクトのいずれにもホストキーがないサーバーに接続するときに使用するポリシーを設定するためのものです。デフォルトのポリシーは、すべての不明なサーバーを拒否することです(RejectPolicyを使用)。AutoAddPolicyに置き換えるか、独自のポリシークラスを作成できます。

詳細については、paramikoapidocをご覧ください。お役に立てれば。

その後、次のように次の使用のために他のキーファイルファイルに保存できます。

ssh.get_host_keys().save('/some/file/path')

次のように、いつでもファイルからロードできます。

ssh.load_host_keys('/some/file/path')
于 2012-07-25T07:01:56.780 に答える
28

ホストキーが欠落しているために例外が発生しました。例外が発生したため、かなり不可解な「不明なサーバー」が手がかりになります。missing_host_key

代わりにこれを試してください:

import paramiko

paramiko.util.log_to_file('ssh.log') # sets up logging

client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('127.0.0.1', username=username, password=password)
stdin, stdout, stderr = client.exec_command('ls -l')
于 2012-05-20T06:33:14.853 に答える
7

この問題が発生したため、ここに回避策を投稿したいと思いました。問題は実際、paramiko では (まだ) サポートされていない ecdsa キーを送信する ssh サーバーでした。私の debian Wheezy システムでは、/etc/ssh/sshd_config の 1 行をコメントアウトして ecdsa を無効にしました。

# ホストキー /etc/ssh/ssh_host_ecdsa_key

sshdを再起動すると、RSAの使用に戻りました。known_hosts ファイルにいくつかの ecdsa キーがあったので、それを削除してリセットし、手動でログインしてキーを再作成しました。そこから、paramiko は RSA ホスト キー チェックを使用して、期待どおりに完全に機能しました。

于 2013-06-28T15:50:11.417 に答える
6

このエラーが発生しました: シェルから接続できますが、paramiko は「不明なサーバー workdevel114」と言います。

known_hosts に 2 つの同様のエントリがありました。

user@host> grep workdevel114 ~/.ssh/known_hosts
workdevel114 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC8qGbuI1BaBodi7sKWLfV8Eh+De80Th7HFLD4WiJWo57THl0Q+QcopUaU3pF....
user@host> grep I1BaBodi7sKWLfV8Eh+De80Th7HFLD4WiJWo57THl0Q+QcopUaU3pF ~/.ssh/known_hosts
workdevel114 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC8qGbuI1BaBodi7sK...
|1|f/auQ9nY5dFbVtOdY3ocjtVO9dM=|esvazUDTT3VIcLk9DxmPI6FZt1s= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC8qGbuI1BaBodi7sKWLfV8Eh+De80Th7HFLD4...

秒のエントリ (|1|....) は、paramiko を混乱させるようです。このチケットに関連していると思います: https://github.com/paramiko/paramiko/issues/67

この行を追加して解決しました:

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ただし、この場合、これにより ssh プロトコルのホスト チェックが無効になります。Paramiko は、ホスト キーが不明であると考えていますが、既知です。既知のキーは無視されます。私の環境では中間者攻撃が発生する可能性はほとんどないので、気にしません。

paraiko-version: 1.7.7.1-1ubuntu1

于 2012-09-07T12:16:01.820 に答える