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

使用Paramiko连接Genymotion时遇BadAuthenticationType错误求助

解决Paramiko publickey认证失败问题

你遇到的BadAuthenticationType错误,核心原因是Paramiko代码里的私钥加载或认证流程不对——服务器明确只接受publickey认证,而你的命令行已经用私钥(genymotion-key.pem)成功执行,说明私钥本身没问题,不需要转换成公钥,只需调整代码的私钥加载方式即可。

1. 正确加载RSA私钥并认证

直接用Paramiko加载你的pem私钥文件,代码示例:

import paramiko

# 加载RSA私钥(如果私钥设置了密码,加上password参数)
private_key = paramiko.RSAKey.from_private_key_file('./keys/genymotion-key.pem')

ssh_client = paramiko.SSHClient()
# 自动接受未知主机密钥(生产环境建议验证主机密钥)
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 仅用私钥认证连接,不要传password参数
ssh_client.connect(
    hostname='ec2-54-153-114-254.us-west-1.compute.amazonaws.com',
    username='shell',
    pkey=private_key
)

2. 排查关键问题点

  • 路径验证:确保代码里的私钥路径./keys/genymotion-key.pem和运行代码的当前工作目录匹配,或者改用绝对路径避免路径错误
  • 文件权限:Linux/macOS环境下,私钥文件权限必须设置为chmod 600 ./keys/genymotion-key.pem,权限过宽会被SSH服务拒绝
  • 避免多余参数:不要在connect方法中传递password参数,否则Paramiko会尝试密码认证,触发服务器的认证类型限制

3. 执行目标命令

连接成功后,执行你的命令并处理输出:

# 执行目标命令
command = 'su -c "setprop persist.sys.usb.config adb"'
stdin, stdout, stderr = ssh_client.exec_command(command)

# 读取命令输出和错误信息
print("命令输出:", stdout.read().decode('utf-8'))
print("错误信息:", stderr.read().decode('utf-8'))

# 关闭SSH连接
ssh_client.close()

内容的提问来源于stack exchange,提问作者Jason Ngo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 16:03:16