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

如何在Paramiko的connect方法中正确替换主机名变量?

在Paramiko的connect方法中正确使用变量主机名的解决方案

我来帮你搞定这个Paramiko变量传递的问题!你遇到的核心问题应该是调用connect方法时,错误地把变量当成字符串字面量处理了(比如不小心给变量名加了引号),导致Paramiko直接把变量名本身当作主机名去连接,而不是变量存储的实际主机地址。

下面是具体的解决思路和修正后的代码:

关键注意点

  • 确保你从JSON中读取的host_data包含正确的主机名字段(比如host_data["hostname"],具体键名要和你的JSON结构对应)
  • 调用connect时直接传入变量,不要给变量名加引号,否则会被识别成字面字符串

修正后的完整代码示例

import paramiko
import json

def exec_commands(host_data):
    # 从传入的host_data中提取主机名,这里假设JSON里的键是"hostname",根据你的实际结构调整
    hostname = host_data["hostname"]
    # 其他必要参数,比如用户名、密码,也从host_data里提取(示例用占位符,你要换成实际键名)
    username = host_data["username"]
    password = host_data["password"]

    new_client = paramiko.SSHClient()
    new_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    # 这里直接传变量hostname,不要加引号!
    new_client.connect(hostname=hostname, username=username, password=password)
    
    # 执行命令示例
    stdin, stdout, stderr = new_client.exec_command("uname -a")
    print(stdout.read().decode())
    
    # 记得关闭连接
    new_client.close()

# 从JSON文件读取主机数据的示例
with open("hosts.json", "r") as f:
    hosts = json.load(f)
    # 遍历主机数据(对应你用iter()的场景)
    for host in hosts:
        exec_commands(host)

常见错误排查

如果你还是遇到问题,可以检查这几点:

  • 打印hostname变量,确认它的值是正确的主机地址,而不是空值或者错误的字符串
  • 检查connect方法的参数是否正确,比如有没有把hostname参数写成了字符串字面量(比如错误写法:new_client.connect(hostname="hostname"),这会去连接名为"hostname"的主机)
  • 确认JSON文件的结构正确,比如每个主机条目都包含你要提取的字段

内容的提问来源于stack exchange,提问作者Raja G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:55:20