You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:10:31