如何在Paramiko中实现ssh -o PubkeyAcceptedKeyTypes=+ssh-rsa的相同行为?
在Paramiko中实现
ssh -o PubkeyAcceptedKeyTypes=+ssh-rsa的等效行为 完全可以实现,核心是让Paramiko的SSH传输层允许ssh-rsa类型的公钥认证,以下是两种常用的实现方式:
方法1:直接修改Transport的允许密钥类型
在创建SSHClient并建立连接前后,获取Transport实例,将ssh-rsa添加到允许的公钥类型列表中:
import paramiko # 初始化SSH客户端 client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 建立基础连接(若用密钥认证可替换对应参数) client.connect('目标主机地址', username='用户名', password='密码', look_for_keys=False) # 获取Transport实例并修改允许的密钥类型 transport = client.get_transport() if transport: # 保留原有支持的密钥类型,追加ssh-rsa allowed_types = transport.allowed_public_key_types if 'ssh-rsa' not in allowed_types: allowed_types.append('ssh-rsa') transport.allowed_public_key_types = allowed_types # 示例:执行远程命令 stdin, stdout, stderr = client.exec_command('ls -l') print(stdout.read().decode()) # 关闭连接 client.close()
方法2:通过本地SSH配置文件指定
如果你的本地已有SSH配置文件(通常路径为~/.ssh/config),可以在文件中为目标主机添加对应配置:
Host 目标主机地址 PubkeyAcceptedKeyTypes +ssh-rsa
随后在Paramiko中加载该配置并应用:
import paramiko from paramiko.config import SSHConfig # 加载本地SSH配置文件 config = SSHConfig() with open('/home/你的用户名/.ssh/config') as f: config.parse(f) # 查找目标主机的配置项 host_config = config.lookup('目标主机地址') # 初始化SSH客户端并应用配置连接 client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect( hostname=host_config['hostname'], username=host_config['user'], # 如需密钥认证,可从config中提取IdentityFile参数 ) # 后续操作... client.close()
注意:Paramiko较新版本默认因安全限制禁用了ssh-rsa,手动添加后即可兼容仅支持该密钥类型的服务器,效果与ssh -o PubkeyAcceptedKeyTypes=+ssh-rsa完全一致。
内容的提问来源于stack exchange,提问作者JenyaKh
相关产品推荐
相关产品推荐

