python3 --Paramiko 远程连接服务器,并同时执行多条shell命令

本文介绍如何利用Python Paramiko库实现远程SSH连接并执行多条命令的方法。具体包括设置客户端、连接远程服务器、构建执行命令字符串以及读取命令执行结果等内容。
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname, port, username, password, timeout=10)
for i in range(10):
    curr = get_value(0, i + 1, 1)
    tx =  get_value(0, i + 1, 3)
    shell = 'test.py '  +  curr  + '  --tx  ' + tx
    #print (shell)
    stdin, stdout, stderr =client.exec_command('cd path;pwd' + ';' + shell,get_pty=True)
    for std in stdout.readlines():
        #print(std)
        with open('result.txt','a') as f:        #a,以追踪的方式写入
            f.write(std)
    for std in stderr.readlines():
        with open('err.txt','a') as f:
            f.write(stderr)
client.close()

paramiko.SSHClient().exec_command() 可以执行一条命令;当执行多条命令时,多条命令放在一个单引号下面,各命令之间用分号隔开,且在末尾加上get_pty=True。当多条命令中有参数时,可以这么写client.exec_command('cd path;pwd' + ';' + shell,get_pty=True)  shell 是参数。


<think>好的,我现在需要帮助用户解决如何使用PythonParamiko库来远程连接Linux服务器执行命令的问题。首先,我得确认用户的需求是什么。用户明确提到想用Python脚本通过Paramiko连接远程Linux服务器执行命令,需要示例脚本。所以我的回答应该包括安装Paramiko的步骤、基本连接命令执行的示例,以及可能的扩展应用。接下来,我需要回顾Paramiko的基本用法。Paramiko是一个实现SSHv2协议的Python库,允许安全地连接远程服务器。用户可能需要了解如何安装Paramiko,所以第一步应该是安装指令,使用pip installparamiko。然后,建立一个SSH连接需要主机名、端口、用户名和密码或密钥。这些信息需要包含在示例代码中。然后,示例脚本的结构。通常,使用SSHClient类,调用connect方法,然后exec_command执行命令。需要注意的是,exec_command返回标准输入、输出和错误流,用户需要读取stdout来获取命令结果。代码示例中应该展示如何执行ls这样的简单命令打印输出。另外,异常处理也很重要,比如网络问题或认证失败,所以建议在代码中添加try-except块,捕获可能的异常,如SSHException或AuthenticationException,这样用户在实际使用时会更有鲁棒性。用户提供的引用中有提到使用多线程来提高效率,这可能是一个高级话题,但用户的问题可能更关注基础,所以可能在相关问题中提及,或者简要提到可以结合多线程处理多个服务器。上传下载文件的部分,用户的问题主要在执行命令,但SFTP功能可以作为扩展内容,可能在示例后简要说明如何使用SFTPClient进行文件传输,或者放在相关问题中。然后,我需要确保回答符合用户给出的格式要求:行内公式用$...$,独立公式用$$...$$,不过在这个问题中可能用不到数学公式,所以可能不需要。但要注意LaTeX的正确使用,如果有的话。回答结构需要清晰,分步骤说明,比如安装Paramiko、编写连接脚本、执行命令、处理结果、异常处理、扩展功能等。代码部分需要用```python包裹,正确缩进。然后生成相关问题,可能涉及性能优化、多线程应用、文件传输、错误处理、替代库等,参考用户提供的示例问题,比如如何优化执行速度,如何上传下载文件,如何结合自动化流程等。需要检查引用标识是否正确添加,用户提供的引用中有5个,但实际回答中可能需要引用Paramiko的官方文档或其他资源,但根据用户给的引用,可能直接使用用户提供的引用[^1]、[^2]等,但要注意引用内容是否相关。例如,引用[^1]提到exec_command的例子,引用[^2]讨论Paramiko库的用途,引用[^3]说明Paramiko替代传统SSH工具,引用[^4]多线程,引用[^5]执行脚本的例子。在回答中,当提到执行命令时,可以引用[^1],介绍Paramiko时引用[^2],自动化应用引用[^3],多线程引用[^4],执行复杂脚本引用[^5]。最后,确保回答使用中文,语言自然,结构清晰,代码正确,且相关问题有针对性,帮助用户进一步学习。</think>### Python使用Paramiko远程连接Linux服务器执行命令 #### 一、安装Paramiko模块 首先通过pip安装Paramiko: ```bash pip install paramiko ``` #### 二、基础连接命令执行 以下是使用Paramiko执行远程命令的完整示例: ```python import paramiko # 配置连接参数 host = "192.168.1.100" port = 22 username = "user" password = "pass123" # 创建SSH客户端 client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 建立连接 client.connect(hostname=host, port=port, username=username, password=password) # 执行命令(例如查看目录) command = "ls -l /tmp" stdin, stdout, stderr = client.exec_command(command) # 获取输出结果 output = stdout.read().decode() error = stderr.read().decode() if output: print(f"命令输出:\n{output}") if error: print(f"错误信息:\n{error}") except paramiko.AuthenticationException: print("认证失败,请检查用户名/密码") except paramiko.SSHException as e: print(f"SSH连接失败: {str(e)}") finally: client.close() ``` #### 三、扩展功能 1. **文件传输** 通过SFTP客户端实现文件上传/下载: ```python # 在已建立的SSH连接基础上 sftp = client.open_sftp() sftp.put("local_file.txt", "/remote/path/file.txt") # 上传 sftp.get("/remote/path/file.txt", "local_file.txt") # 下载 sftp.close() ``` 2. **多命令执行** 对于需要交互的多条命令,建议使用`invoke_shell`: ```python channel = client.invoke_shell() channel.send("cd /var/log\n") channel.send("grep error syslog\n") time.sleep(1) # 等待命令执行 output = channel.recv(4096).decode() print(output) ``` 3. **超时控制** 在`connect()`方法中添加`timeout`参数防止网络阻塞: ```python client.connect(..., timeout=10) ``` #### 四、性能优化建议 - 对于批量服务器操作,建议结合多线程(参考`concurrent.futures`模块)[^4] - 长耗时命令使用`exec_command`的`get_pty=True`参数 - 复用连接避免频繁建立/断开
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值