web-dev-qa-db-ja.com

Paramiko:Host_keyをknown_hostsに永続的に追加します

このコードは、ssh接続を行うのに役立ちます。 _set_missing_Host_key_policy_でキーが見つからない場合に_known_hosts_が役立つことを知っています。しかし、実際のsshのようには動作しません。このコードを初めて実行した後、_Host_key_が_known_hosts_に追加され、関数set_missing_Host_key_policy()はもうありません。しかし、_(paramiko.ssh_exception.SSHException)_は間違っていました。 paramikoを使用して_Host_key_を_known_hosts_に永続的に追加するにはどうすればよいですか? (バックエンドコードの特定の部分は「C」で記述されており、_Host_key_が_known_hosts_にあることが必要です)

それとも私は何かを誤解していますか?これについてのガイダンスが必要です...

_import paramiko

client = paramiko.SSHClient()
client.load_system_Host_keys()
client.set_missing_Host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=str(Host),username =str(user),password=str(pswd))
_
11
nidHi

パッケージのドキュメントから、

client.load_system_Host_keys(filename=None)

Load Host keys from a system (read-only) file.  Host keys read with
this method will not be saved back by `save_Host_keys`.

client.load_Host_keys(filename)

Load Host keys from a local Host-key file.  Host keys read with this
method will be checked after keys loaded via `load_system_Host_keys`,
but will be saved back by `save_Host_keys` (so they can be modified).
The missing Host key policy `.AutoAddPolicy` adds keys to this set and
saves them, when connecting to a previously-unknown server.

したがって、Paramikoに新しいホストキーを保存させるには、load_Host_keysではなくload_system_Host_keysを使用する必要があります。例えば。

client.load_Host_keys(os.path.expanduser('~/.ssh/known_hosts'))

しかし中間者攻撃を受け入れるようになるため、AutoAddPolicyの使用を避けることは、一般的には良い考えです。私がやったことは、スクリプトと同じフォルダーにローカルknown_hostsを生成することでした。

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=./known_hosts user@Host

代わりにこのファイルをロードします:

client.load_Host_keys(os.path.join(os.path.dirname(__file__), 'known_hosts'))

このようにして、known_hostsをスクリプトと一緒に配布し、それらのマシンの実際のknown_hostsに触れることなく、別のマシンで実行することができます。

15
danmichaelo

実行時に特定のキーを1つ追加する場合(ファイルなし):

from paramiko import RSAKey
from paramiko.py3compat import decodebytes

client = SSHClient()

# known Host key
know_Host_key = "<KEY>"
keyObj = RSAKey(data=decodebytes(know_Host_key.encode()))

# add to Host keys
client.get_Host_keys().add(hostname=Host, keytype="ssh-rsa", key=keyObj)

# login to ssh hostname
client.connect(hostname=Host, port=PORT, username=USER)...

ソース: https://github.com/paramiko/paramiko/blob/2.6.0/tests/test_hostkeys.py#L75-L84

2
Ramon Medeiros
import paramiko
import os

ssh= paramiko.SSHClient()
ssh.set_missing_Host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.10.49', port=22,username='root', password='abc@123')
def addnewuser():

    uname=input("Type your new Create userName")
    upass=input("Enter Password")



    os.system("useradd -m -p "+upass+" "+uname)

addnewuser()
1
Ganesh Jat