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