Python Paramiko:从公钥字符串创建PKey
我试图在较低的级别上使用SSH协议(即,我不想启动shell或任何东西,我只想传递数据)。因此,我直接使用Paramiko的类 我已经完成了服务器端的工作,但现在我正在为一些愚蠢的事情碰壁。对于要连接到服务器的客户端,Python Paramiko:从公钥字符串创建PKey,python,ssh,paramiko,ssh-keys,Python,Ssh,Paramiko,Ssh Keys,我试图在较低的级别上使用SSH协议(即,我不想启动shell或任何东西,我只想传递数据)。因此,我直接使用Paramiko的类 我已经完成了服务器端的工作,但现在我正在为一些愚蠢的事情碰壁。对于要连接到服务器的客户端,传输将两个对象作为参数:客户端的私钥(pkey)和服务器的公钥(hostkey) 该类被描述为“公钥的基类”。但问题是,我不知道如何仅用ssh公钥(即字符串ssh-which-aablabla)创建这样一个对象。它有用私钥构建这样一个对象的方法,但显然我不想让客户端知道服务器的私钥
传输
将两个对象作为参数:客户端的私钥(pkey
)和服务器的公钥(hostkey
)
该类被描述为“公钥的基类”。但问题是,我不知道如何仅用ssh公钥(即字符串ssh-which-aablabla
)创建这样一个对象。它有用私钥构建这样一个对象的方法,但显然我不想让客户端知道服务器的私钥
我觉得我忽略了一些简单的事情,但我在网上找不到这样做的信息;大多数教程都使用更高级的方法来加载系统的
已知\u主机
键。通过调用以下中描述的各个方法来解决此问题:
这多少有些道理
不过,我仍然愿意接受更好/更短的建议。就目前而言,
connect
方法的hostkey
参数似乎不可用。必须在另一个上下文中再次解决此问题,该上下文不仅仅用于密钥比较(用于签名检查)。这是正确的方法。回想起来,这很简单,但几乎没有记录在案
# For a public key "ssh-rsa AAblablabla...":
key = paramiko.RSAKey(data=base64.b64decode('AAblablabla...'))
key.verify_ssh_sig(..., ...)
添加到为传输客户端提供的解决方案中。下面是我向SSH客户端添加字符串公钥的解决方案:
my_pub_key = "xx.xx.xx.xx ecdsa-sha2-nistp256 mlzdHAyNT....."
my_host = my_pub_key.split(' ')[0]
password = 'myFavortitePassword'
username = 'myUsername'
ssh_client=paramiko.SSHClient()
host_key_policy = paramiko.MissingHostKeyPolicy()
host_key_policy.missing_host_key(ssh_client, my_host, my_pub_key)
ssh_client.connect(hostname= my_host
,username=username
,password=password
,port=22
,look_for_keys=False)
按照我的建议,将数据传递给PKey会起作用(事实并非如此),PKey甚至没有实现构造函数,并且RSAKey似乎没有按照预期接受数据参数。任何人都可以扩展此解决方案吗?我不明白答案。
my_pub_key = "xx.xx.xx.xx ecdsa-sha2-nistp256 mlzdHAyNT....."
my_host = my_pub_key.split(' ')[0]
password = 'myFavortitePassword'
username = 'myUsername'
ssh_client=paramiko.SSHClient()
host_key_policy = paramiko.MissingHostKeyPolicy()
host_key_policy.missing_host_key(ssh_client, my_host, my_pub_key)
ssh_client.connect(hostname= my_host
,username=username
,password=password
,port=22
,look_for_keys=False)