如何在Python中通过SSH连接从远程主机发送GET请求?
问题解决:通过Paramiko在远程主机执行GET请求
错误原因分析
你写的代码存在两个关键问题:
- 直接把目标URL作为命令传给
exec_command,但远程主机需要执行的是curl命令,不是直接输入URL。 - 错误调用了
command.request("GET", '/'),字符串对象没有request方法,这行代码会直接触发报错。
修正后的代码
import paramiko username = 'root' hostname = '175.111.0.26' port = 22 password='password' # 注意原代码里的拼写错误:passowrd -> password def do_it(): s = paramiko.SSHClient() # 自动处理未知主机密钥(生产环境建议手动配置主机密钥,更安全) s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) s.connect(hostname, port, username, password) # 构造和CMD环境中完全一致的curl命令 curl_command = 'curl -X GET "https://bsms.its.com.pk/otpsms.php?key=xxx&receiver=number&sender=xxxx¶m1=xxx&otpcode=1234"' # 执行命令并获取输出流 stdin, stdout, stderr = s.exec_command(curl_command) # 打印执行结果,方便排查问题 print("命令输出:", stdout.read().decode()) print("错误信息:", stderr.read().decode()) s.close()
额外说明
- 原代码中
load_system_host_keys()如果本地未存储该远程主机的密钥,可能导致连接失败,添加set_missing_host_key_policy(paramiko.AutoAddPolicy())可自动处理该场景。 - 执行命令后获取
stdout和stderr的内容,能快速定位命令执行是否成功、是否存在报错。 - 注意修正原代码里的密码拼写错误
passowrd,改为正确的password。
内容的提问来源于stack exchange,提问作者Fouz Siddiqui
相关产品推荐
相关产品推荐

