Paramiko: добавить ключ хоста к известным хостам постоянно

этот код помогает мне сделать соединение shh. Я знаю это set_missing_host_key_policy помогает, когда ключ не найден в known_hosts. Но он ведет себя не так, как настоящий ssh, потому что после первого запуска этого кода я предположил, что host_key будет добавлен в known_hosts и что мне не нужно иметь функцию . Как я могу постоянно добавлять host_key до known_hosts используя paramiko? (Поскольку определенная часть бэкэнд-кода написана на "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))

2 ответов


из документации пакета сравните

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 на этих машинах.


##Добавить пользователя удаленно ssh с помощью paramiko

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()