nid*_*dHi 10 python ssh paramiko
这段代码可以帮我建立一个shh连接.我知道set_missing_host_key_policy在没有找到密钥时会有所帮助known_hosts.但它的行为并不像实际的那样ssh,因为在我第一次运行这段代码之后,我认为它host_key会被添加到known_hosts并且我不再需要该函数set_missing_host_key_policy()了.但是,我错了(paramiko.ssh_exception.SSHException).我怎样才能永久添加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))
Run Code Online (Sandbox Code Playgroud)
dan*_*elo 15
从包文档中,进行比较
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`.
Run Code Online (Sandbox Code Playgroud)
同
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.
Run Code Online (Sandbox Code Playgroud)
因此,要使Paramiko存储任何新的主机密钥,您需要使用load_host_keys,而不是load_system_host_keys.例如
client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
Run Code Online (Sandbox Code Playgroud)
但是避免使用通常是一个好主意AutoAddPolicy,因为它会让你对中间人攻击持开放态度.我最终做的是known_hosts在与脚本相同的文件夹中生成一个本地:
ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=./known_hosts user@host
Run Code Online (Sandbox Code Playgroud)
然后加载此文件:
client.load_host_keys(os.path.join(os.path.dirname(__file__), 'known_hosts'))
Run Code Online (Sandbox Code Playgroud)
这样我就可以known_hosts与我的脚本一起分发并在不同的机器上运行它,而无需触及这些机器上的实际known_hosts.
如果你想在运行时添加一个特定的键(没有任何文件):
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)...
Run Code Online (Sandbox Code Playgroud)
来源:https : //github.com/paramiko/paramiko/blob/2.6.0/tests/test_hostkeys.py#L75-L84
| 归档时间: |
|
| 查看次数: |
10410 次 |
| 最近记录: |