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

如何用Python模块实现远程服务器脚本运行及运行时终止输入?

实现方案

要完成远程执行脚本并处理交互式终止的需求,推荐使用paramiko模块实现SSH远程连接与交互式会话操作,以下是具体实现步骤和代码:

前置准备

先安装依赖模块:

pip install paramiko

核心实现代码

import paramiko
import time

def run_remote_script(hostname, username, auth_credential, remote_script_cmd):
    ssh = paramiko.SSHClient()
    # 生产环境建议替换为手动配置已知主机密钥,避免安全风险
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    try:
        # 根据认证方式连接:密码或密钥
        if isinstance(auth_credential, str):
            # 密码认证
            ssh.connect(hostname, username=username, password=auth_credential)
        else:
            # 密钥认证,传入私钥对象
            ssh.connect(hostname, username=username, pkey=auth_credential)
        
        # 创建交互式Shell会话,用于处理脚本的等待输入逻辑
        shell = ssh.invoke_shell()
        time.sleep(1)  # 等待Shell初始化
        
        # 发送远程脚本执行命令
        shell.send(f"{remote_script_cmd}\n")
        print("远程脚本已启动,等待终止信号触发...")
        
        # 等待脚本进入等待输入状态(可根据脚本实际输出调整等待逻辑,比如检测特定输出字符串)
        time.sleep(2)
        
        # 发送任意内容触发终止(这里发送回车,可替换为其他字符)
        shell.send("\n")
        print("已发送终止信号,等待脚本结束...")
        
        # 持续读取输出直到会话关闭
        while not shell.closed:
            if shell.recv_ready():
                output = shell.recv(1024).decode("utf-8")
                print(output, end="")
            time.sleep(0.5)
            
    finally:
        ssh.close()

# 调用示例
if __name__ == "__main__":
    # 远程服务器配置
    REMOTE_HOST = "你的远程服务器IP或域名"
    REMOTE_USER = "服务器登录用户名"
    # 认证方式二选一:密码或密钥
    # 密码认证:
    # AUTH_INFO = "你的登录密码"
    # 密钥认证:
    # from paramiko import RSAKey
    # AUTH_INFO = RSAKey.from_private_key_file("/path/to/your/private/key")
    
    # 远程执行命令
    REMOTE_COMMAND = "python sample.py read_config.cfg MyLogs"
    
    run_remote_script(REMOTE_HOST, REMOTE_USER, AUTH_INFO, REMOTE_COMMAND)

关键说明

  • 交互式会话选择:使用invoke_shell而非exec_command,因为后者是非交互式模式,无法处理远程脚本等待用户输入的场景
  • 认证方式:支持密码和密钥两种认证方式,生产环境优先使用密钥认证提升安全性
  • 等待逻辑优化:示例中用time.sleep做简单等待,实际场景可通过检测远程脚本的特定输出(比如"Press any key to exit...")来精准判断脚本是否进入等待输入状态,避免不必要的延迟
  • 输出读取:循环读取输出直到会话关闭,确保捕获脚本终止过程中的所有日志

内容的提问来源于stack exchange,提问作者Nitin Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:15:13