このコードは、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))
_
パッケージのドキュメントから、
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に触れることなく、別のマシンで実行することができます。
実行時に特定のキーを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
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()