paramiko采用交互式shell获取远程脚本返回数据 判断完成

时间: 2023-09-12 10:10:06 浏览: 17
使用 Paramiko 采用交互式 Shell 的方式连接远程服务器并执行脚本,可以通过以下步骤获取脚本的返回数据并判断脚本是否执行完成: 1. 打开 SSH 连接并获取交互式 Shell ```python import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname='remote_host', username='username', password='password') channel = ssh.invoke_shell() ``` 2. 执行脚本并等待脚本执行完成 ```python channel.send('python /path/to/script.py\n') while not channel.recv_ready(): continue while channel.recv_ready(): output = channel.recv(1024).decode() ``` 3. 判断脚本是否执行完成 与前面的方法类似,可以通过判断脚本的返回值来判断脚本是否执行完成。可以使用以下代码获取脚本的返回值: ```python exit_status = channel.recv_exit_status() if exit_status == 0: print('脚本执行成功') else: print('脚本执行失败') ``` 完整代码如下: ```python import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname='remote_host', username='username', password='password') channel = ssh.invoke_shell() channel.send('python /path/to/script.py\n') while not channel.recv_ready(): continue while channel.recv_ready(): output = channel.recv(1024).decode() exit_status = channel.recv_exit_status() if exit_status == 0: print('脚本执行成功') else: print('脚本执行失败') ```

相关推荐

Paramiko是一个Python模块,可以在远程服务器上执行命令并实现交互式操作。在使用Paramiko进行交互操作时,一般需要以下几个步骤: 1. 首先,导入Paramiko库,确保已经安装了Paramiko模块。 2. 创建一个Transport对象,指定远程服务器的IP地址和端口号。 3. 使用用户名和密码进行身份验证,调用auth_password方法。 4. 打开一个通道,可以通过open_session方法来实现。 5. 设置通道的超时时间,使用settimeout方法[3]。 6. 获取一个终端,调用get_pty方法。 7. 激活终端,使用invoke_shell方法[3]。 8. 发送要执行的命令,使用send方法。 9. 通过循环分批次取回命令的回显,可以使用recv方法。 10. 根据命令执行提示符来判断命令是否执行完成,可以使用字符串的判断。 11. 当命令执行完成后,关闭通道和连接,使用close方法。 下面是一个示例代码,演示了如何使用Paramiko进行交互式操作: python import paramiko import time def test_paramiko_interact(): trans = paramiko.Transport(('10.46.169.111',22)) trans.start_client() trans.auth_password(username='user', password='pwd') channel = trans.open_session() channel.settimeout(7200) channel.get_pty() channel.invoke_shell() cmd = 'cd /home/shell_study\r' channel.send(cmd) cmd = 'bash ./study_shell.sh\r' channel.send(cmd) while True: time.sleep(0.2) rst = channel.recv(1024) rst = rst.decode('utf-8') print(rst) if 'yes/no' in rst: channel.send('yes\r') time.sleep(0.5) ret = channel.recv(1024) ret = ret.decode('utf-8') print(ret) if '命令执行完成的标识' in ret: break channel.close() trans.close() if __name__ == '__main__': test_paramiko_interact() 在以上代码中,我们通过Paramiko库完成了一个简单的交互式命令的操作。具体的步骤和方法可以根据实际需求进行调整和扩展。
### 回答1: Python可以通过paramiko库实现远程执行shell脚本。具体步骤如下: 1. 安装paramiko库:使用pip install paramiko命令进行安装。 2. 导入paramiko库:在Python脚本中使用import paramiko语句导入paramiko库。 3. 创建SSHClient对象:使用paramiko库中的SSHClient类创建SSHClient对象。 4. 连接远程主机:使用SSHClient对象的connect方法连接远程主机。 5. 执行shell脚本:使用SSHClient对象的exec_command方法执行shell脚本。 6. 关闭连接:使用SSHClient对象的close方法关闭连接。 示例代码如下: import paramiko # 创建SSHClient对象 ssh = paramiko.SSHClient() # 自动添加主机名和密钥到本地主机的HostKeys对象 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接远程主机 ssh.connect(hostname='remote_host', port=22, username='username', password='password') # 执行shell脚本 stdin, stdout, stderr = ssh.exec_command('sh /path/to/script.sh') # 输出执行结果 print(stdout.read().decode()) # 关闭连接 ssh.close() ### 回答2: Python可以通过调用Paramiko库来实现远程执行shell脚本。 Paramiko是一个基于Python的SSH协议库,可以实现SSH客户端和SSH服务器。以下是一个示例代码,用于远程执行shell脚本: python import paramiko # 远程主机信息 hostname = 'localhost' username = 'root' password = 'password' # 建立SSH客户端连接 client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname, username=username, password=password) # 远程执行shell脚本 stdin, stdout, stderr = client.exec_command('sh /path/to/script.sh') # 输出执行结果 print(stdout.read()) # 断开SSH连接 client.close() 在这个代码中,我们首先通过Paramiko库建立了一个SSH客户端连接。然后,使用exec_command()方法来运行远程主机上的shell脚本。最后,我们利用stdout.read()方法读取了执行结果并进行输出。最后,我们使用close()方法关闭了与远程主机的连接。 值得注意的是,虽然使用Paramiko库可以方便地实现远程执行shell脚本,但为了安全和授权等原因,远程主机的安全设置可能会要求进行额外的调整。此外,如果要使用SSH密钥进行身份验证,可能需要编写其他代码。 ### 回答3: Python 是一种强大的编程语言,可以轻松地执行操作系统上的命令和脚本。如果你需要在远程服务器上运行一些 shell 脚本,Python 也可以实现。在这里,我们将探讨如何在 Python 中远程执行 shell 脚本。 首先,我们需要使用 Python 的 SSH 库进行远程登录到服务器。Python 的 Paramiko 库提供了 SSH 客户端的实现,可以帮助我们连接到服务器上的 SSH 服务。我们可以使用 pip 或 conda 安装 Paramiko 库: pip install paramiko 或 conda install paramiko 在安装 Paramiko 库之后,我们需要导入库并使用 ssh 客户端连接到远程服务器。以下是连接到服务器的 Python 代码示例: python import paramiko # Create an SSH client client = paramiko.SSHClient() # Automatically add the server key to the client client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # Connect to the remote server client.connect('your_server_ip', username='your_username', password='your_password') 这将创建一个 SSH 客户端,并使用提供的用户名和密码连接远程服务器。 现在,我们可以使用 ssh 客户端执行 shell 命令和脚本。以下是使用 Python 远程执行 shell 脚本的代码示例: python import paramiko # Create an SSH client client = paramiko.SSHClient() # Automatically add the server key to the client client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # Connect to the remote server client.connect('your_server_ip', username='your_username', password='your_password') # Execute a shell script on the remote server stdin, stdout, stderr = client.exec_command('bash /path/to/your/script.sh') # Print the output of the command print(stdout.read().decode('utf-8')) # Close the SSH connection client.close() 在这个示例中,我们使用 exec_command() 方法执行 shell 脚本。该方法返回三个文件流,分别是标准输入、标准输出和标准错误输出。我们可以使用 stdout.read() 方法获取输出,并使用 decode() 方法将其转换为 UTF-8 字符串。 最后,我们需要关闭 SSH 连接,以便释放资源并避免连接泄漏。 总之,使用 Python 执行远程 shell 脚本十分简单,我们只需要使用 Paramiko 库连接到服务器并使用 exec_command() 方法远程执行脚本即可。这种方法可以在远程服务器上执行任何类型的 shell 脚本,从而可以实现更高效和自动化的部署。
### 回答1: Paramiko是一个Python库,用于在远程服务器上执行SSH命令。其中的invoke_shell()方法可用于打开一个交互式的shell,以便在远程服务器上执行命令。 下面是一个使用invoke_shell()的示例代码,其中连接到远程服务器后,在交互式shell中执行了一些命令: import paramiko # 建立ssh连接 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('remote_host', username='username', password='password') # 打开交互式shell channel = ssh.invoke_shell() # 执行命令 channel.send('ls\n') output = channel.recv(1024) print(output.decode()) channel.send('cd /path/to/directory\n') output = channel.recv(1024) print(output.decode()) channel.send('ls\n') output = channel.recv(1024) print(output.decode()) # 关闭连接 ssh.close() 以上代码连接到远程主机,打开交互式shell,发送ls命令,接收输出并打印。接着发送cd和ls命令,接收输出并打印。最后关闭连接。 ### 回答2: Paramiko是一个Python的SSH客户端库,用于与远程服务器进行安全的远程操作。它提供了一个名为invoke_shell的方法,用于创建一个交互式的shell会话。 使用invoke_shell方法,可以通过SSH连接远程服务器并执行命令,同时还可以与远程服务器进行交互。 下面是一个使用Paramiko库中invoke_shell方法的代码示例: python import paramiko # 创建SSH客户端对象 ssh = paramiko.SSHClient() # 添加服务器的主机密钥到本地的Known_hosts文件 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接远程服务器 ssh.connect('服务器IP地址', port=22, username='用户名', password='密码') # 创建交互式shell会话 shell = ssh.invoke_shell() # 发送命令给远程服务器 shell.send('ls -l\n') # 接收远程服务器的输出 output = shell.recv(1024) print(output.decode()) # 在交互式会话中发送更多命令 shell.send('pwd\n') output = shell.recv(1024) print(output.decode()) # 退出交互式shell会话 shell.close() # 关闭SSH连接 ssh.close() 上面的代码首先创建了一个SSH客户端对象,然后连接远程服务器。invoke_shell方法创建了一个交互式的shell会话,并返回一个SSHClientChannel对象(即shell)。你可以使用send方法向远程服务器发送命令,并使用recv方法接收远程服务器的输出。 在示例中,我们向远程服务器发送了两条命令(ls -l和pwd),并接收了远程服务器返回的输出。最后,我们关闭了shell会话和SSH连接。 务必将代码中的服务器IP地址,用户名和密码替换为实际的远程服务器信息。同时,如果远程服务器的主机密钥不在本地的Known_hosts文件中,则需要使用set_missing_host_key_policy方法将其添加到Known_hosts中,以避免连接时出现警告或错误。 希望这个代码示例能够帮助到你了解如何使用Paramiko库中的invoke_shell方法。 ### 回答3: Paramiko是一个Python库,用于实现SSH协议的客户端。它提供了许多功能,包括执行远程命令和交互式会话等。其中,invoke_shell方法用于创建一个交互式的shell会话。 下面是一个使用Paramiko的invoke_shell方法的代码示例: python import paramiko # 创建SSH客户端 ssh = paramiko.SSHClient() # 允许连接不在known_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接远程服务器 ssh.connect('remote_host', username='username', password='password') # 创建交互式shell会话 shell = ssh.invoke_shell() # 发送命令并打印输出 shell.send('ls\n') output = shell.recv(1024) print(output.decode()) # 在会话中执行命令并获取输出 shell.send('pwd\n') output = shell.recv(1024) print(output.decode()) # 关闭会话 shell.close() # 关闭SSH连接 ssh.close() 以上代码首先创建了一个SSH客户端对象,然后使用set_missing_host_key_policy方法设置客户端的策略,允许连接不在known_hosts文件中的主机。接下来,使用connect方法连接到远程服务器,需要提供远程主机的IP地址(或主机名)、用户名和密码。 然后,使用invoke_shell方法创建一个交互式的shell会话,返回一个SSHClientChannel对象,该对象可以用于向远程主机发送命令和接收输出。 在这个示例中,首先使用send方法向shell会话发送一个ls命令,接着使用recv方法接收输出,并使用decode方法将输出从字节字符串转换为普通字符串,然后打印出来。随后,使用相同的方法执行pwd命令并获取输出。 最后,使用close方法关闭会话和SSH连接。 需要注意的是,上述示例中的用户名和密码都是以明文形式硬编码在代码中,这并不是一个安全的方式。在实际应用中,应该使用更安全的方式存储用户名和密码,例如使用配置文件或环境变量。
### 回答1: Python Paramiko 是一个用于 SSH 和 SFTP 的 Python 模块,可以实现实时交互。通过 Paramiko,可以在 Python 中远程执行命令、上传和下载文件等操作。在实时交互中,可以通过 Paramiko 的 SSHClient 类的 invoke_shell() 方法来创建一个交互式的 shell。然后,可以使用 send() 方法发送命令,使用 recv() 方法接收命令的输出。同时,还可以使用 select 模块来实现非阻塞式的交互。 ### 回答2: Python paramiko 是一个用于远程登录和管理的模块,常用于远程服务器管理和自动化测试等方面。在使用 paramiko 进行实时交互时,主要有以下几个步骤: 1. 连接远程服务器:首先需要使用 SSHClient() 方法创建一个 SSH 连接,然后使用 .connect() 方法连接远程服务器,参数包括远程服务器地址、端口号、用户名和密码等信息。 2. 执行命令:使用 .exec_command() 方法执行命令,该方法返回三个值,包括标准输入、标准输出和标准错误输出,我们通常会用到标准输出。可以使用 .readlines() 方法获取命令执行的结果,并将结果打印输出。 3. 交互操作:有些命令需要交互操作,例如输入密码等。此时需要创建一个 Channel 对象,并使用 .invoke_shell() 方法打开一个交互终端。然后使用 .send() 方法发送需要操作的命令或数据,使用 .recv() 方法接收命令执行的返回结果。需要注意的是,每次接收到返回结果后,都需要使用 .recv_ready() 方法判断是否还有数据,如果没有数据则交互结束。 下面给出一个简单的代码示例,该示例用于实现在远程服务器上安装 nginx 并启动服务的过程。 import paramiko # 创建 SSHClient 对象 ssh = paramiko.SSHClient() # 自动保存远程主机的 SSH 公钥 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接远程服务器 ssh.connect('xxx.xxx.xxx.xxx', port=22, username='root', password='123456') # 安装 nginx stdin, stdout, stderr = ssh.exec_command('yum install -y nginx') print(stdout.readlines()) print(stderr.readlines()) # 启动 nginx 服务 channel = ssh.invoke_shell() channel.send('systemctl start nginx\n') while True: if channel.recv_ready(): print(channel.recv(1024).decode()) break # 关闭连接 ssh.close() 在上述代码中,首先通过调用 .exec_command() 方法安装 nginx,然后通过调用 .invoke_shell() 方法打开交互终端,在终端中发送启动 nginx 服务的命令,并循环接收返回结果。最后关闭连接,本次实时交互结束。 ### 回答3: Python Paramiko是Python编程语言的SSH客户端。通过Paramiko库,我们可以实现与远程计算机的SSH交互,包括执行Shell命令、传输文件、端口转发等操作。本文将介绍如何使用Paramiko实现Python与远程计算机之间的实时交互。 Paramiko库提供了SSHClient类,它实现了与SSH服务器之间的远程交互。要创建SSHClient对象,我们可以执行以下代码: import paramiko ssh = paramiko.SSHClient() 然后,要连接到远程计算机,需要使用SSHClient对象的connect()方法,例如: ssh.connect(hostname='remote_host', port=22, username='username', password='password') 连接成功后,我们就可以执行远程Shell命令,例如: stdin, stdout, stderr = ssh.exec_command('ls -l') print(stdout.read()) 上述代码执行了一条ls -l命令,以列表形式返回了目标目录下的文件和目录的详细列表。 如果我们需要与执行命令的交互,我们需要调用SSHClient对象的invoke_shell()方法,例如: channel = ssh.invoke_shell() 然后,我们就可以使用channel对象的方法执行实时交互。例如,如果我们需要在远程计算机上启动一个Python解释器,并执行Python代码: channel.send('python\n') channel.send('print("Hello, world!")\n') response = channel.recv(1024) print(response.decode()) 上述代码从本地电脑向远程计算机发送两个命令。第一个命令是打开Python解释器,第二个命令是使用解释器运行一行代码,打印出“Hello,world!” 最后,我们需要断开连接,我们可以使用SSHClient对象的close()方法: ssh.close() 总之,Python Paramiko库提供了强大的实现Python与远程计算机之间实时交互的能力。通过它,我们可以轻松地实现远程Shell命令和Python交互。
好的,使用面向对象编程思想来使用paramiko中的invoke_shell,可以先定义一个SSHClient类,然后在该类中定义一个invoke_shell方法,如下所示: python import paramiko class SSHClient: def __init__(self, hostname, port, username, password): self.hostname = hostname self.port = port self.username = username self.password = password self.client = None self.shell = None def connect(self): self.client = paramiko.SSHClient() self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) self.client.connect(self.hostname, self.port, self.username, self.password) self.shell = self.client.invoke_shell() def invoke_shell(self): if self.shell is None: self.connect() return self.shell 在该类中,我们定义了一个初始化方法,用于初始化SSHClient类的属性,其中包括远程主机名、端口号、用户名和密码,以及SSHClient类的client属性和shell属性。在connect方法中,我们使用paramiko库中的SSHClient类的connect方法连接到远程主机,并使用invoke_shell方法打开一个交互式shell。在invoke_shell方法中,我们判断shell属性是否为None,如果是,则调用connect方法连接到远程主机并打开一个交互式shell,否则直接返回shell属性,即已经打开的交互式shell。 使用该类的示例代码如下: python ssh_client = SSHClient('hostname', 22, 'username', 'password') shell = ssh_client.invoke_shell() shell.send('ls\n') output = shell.recv(65535).decode('utf-8') print(output) 在该示例代码中,我们实例化了SSHClient类,并调用了其invoke_shell方法打开一个交互式shell,然后使用send方法向远程主机发送了一个ls命令,并使用recv方法接收了远程主机的输出结果,并将其转换为utf-8编码的字符串并打印出来。
Python paramiko是一个用于远程执行命令的模块,常用于编写自动化脚本。交换机巡检脚本是指使用paramiko模块编写的脚本,用于自动进行交换机的巡检工作。 交换机巡检是指对交换机进行系统性的检查和评估,包括硬件、软件、配置等方面的检查。通过巡检可以及时发现和解决一些潜在的问题,确保交换机的正常运行和稳定性。 Python paramiko交换机巡检脚本可以实现以下功能: 1. 连接远程交换机:使用paramiko模块的SSHClient类建立SSH连接,设置用户名和密码等连接参数。 2. 执行命令:使用SSHClient对象的exec_command方法执行巡检命令,如show version、show interface等,通过解析命令输出获取交换机的基本信息。 3. 分析输出:对命令输出进行解析和处理,提取关键信息如交换机的型号、固件版本、端口状态等,将这些信息保存到文件或数据库中,方便后续分析和报告生成。 4. 异常处理:处理执行命令时可能出现的超时、连接失败等异常情况,保证脚本的鲁棒性和可靠性。 5. 日志记录:使用Python的logging模块记录脚本的执行日志,包括连接日志、命令执行日志等,便于排查问题和追踪执行情况。 6. 定时运行:使用Python的定时任务框架如APScheduler,实现定时自动执行巡检脚本,确保交换机巡检的连续性和及时性。 总之,Python paramiko交换机巡检脚本是一种利用paramiko模块实现远程命令执行的自动化脚本,用于对交换机进行巡检工作,提高交换机的管理效率和稳定性。

最新推荐

python使用paramiko模块通过ssh2协议对交换机进行配置的方法

今天小编就为大家分享一篇python使用paramiko模块通过ssh2协议对交换机进行配置的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

python使用paramiko实现ssh的功能详解

主要介绍了python使用paramiko实现ssh的功能详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

图灵测试:技术、哲学与人类的未来.docx

图灵测试:技术、哲学与人类的未来.docx

39仓库管理系统boot.txt

包含完整代码及报告

plc控制交通灯毕业设计论文.doc

plc控制交通灯毕业设计论文.doc

"阵列发表文章竞争利益声明要求未包含在先前发布版本中"

阵列13(2022)100125关于先前发表的文章竞争利益声明声明未包含在先前出现的以下文章的发布版本问题 的“数组”。 的 适当的声明/竞争利益由作者提供的陈述如下。1. https://doi.org/10.1016/j.array.2020.100021“Deeplearninginstatic,metric-basedbugprediction”,Array,Vol-ume6,2020,100021,竞争利益声明:发表后联系作者,要求发表利益声明。2. 自 适 应 恢 复 数 据 压 缩 。 [ 《 阵 列 》 第 12 卷 , 2021 , 100076 ,https://doi.org/10.1016/j.array.2021.100076.竞争利益声明:发表后联系作者,要求发表利益声明。3. “使用深度学习技术和基于遗传的特征提取来缓解演示攻击”。[《阵列》第7卷,2020年,100029]https://doi.org/10.1016/j.array.2020.100029。竞争利益声明:发表后联系作者,要求发表利益声明。4. “基于混合优化算法的协作认知无线电网络资源优化分配”. [Array,Volume12,2021,100093https://doi

动态规划与最大子数组和问题:如何高效解决序列中的最大子数组和

## 1. 引言 ### 1.1 背景介绍 动态规划是一种解决复杂问题的算法设计方法,它通过将问题分解成子问题,并解决每个子问题,从而逐步构建最优解。在计算机科学和算法领域,动态规划被广泛应用于优化问题的求解。 ### 1.2 动态规划在算法中的重要性 动态规划不仅仅是一种算法,更是一种解决问题的思维方式。它通过保存子问题的解,避免了重复计算,从而在时间和空间上实现了效率的提升。这种思想在很多经典算法问题中都发挥着关键作用,其中之一便是最大子数组和问题。 ### 1.3 最大子数组和问题的实际应用场景 最大子数组和问题是在一个数组中找到一个具有最大和的连续子数组的问题。这个问题在实际中有

def charlist(): li=[] for i in range('A','Z'+1): li.append(i) return li

这段代码有误,因为 `range()` 函数的第一个参数应该是整数类型而不是字符串类型,应该改为 `range(ord('A'), ord('Z')+1)`。同时,还需要将 `ord()` 函数得到的整数转化为字符类型,可以使用 `chr()` 函数来完成。修改后的代码如下: ``` def charlist(): li = [] for i in range(ord('A'), ord('Z')+1): li.append(chr(i)) return li ``` 这个函数的作用是返回一个包含大写字母 A 到 Z 的列表。

本科毕设论文-—基于单片机控制“航标灯”的控制系统设计与调试.doc

本科毕设论文-—基于单片机控制“航标灯”的控制系统设计与调试.doc

动态多智能体控制的贝叶斯优化模型及其在解决复杂任务中的应用

阵列15(2022)100218空间导航放大图片创作者:John A. 黄a,b,1,张克臣c,Kevin M. 放大图片作者:Joseph D. 摩纳哥ca约翰霍普金斯大学应用物理实验室,劳雷尔,20723,MD,美国bKavli Neuroscience Discovery Institute,Johns Hopkins University,Baltimore,21218,VA,USAc约翰霍普金斯大学医学院生物医学工程系,巴尔的摩,21205,MD,美国A R T I C L E I N F O保留字:贝叶斯优化多智能体控制Swarming动力系统模型UMAPA B S T R A C T用于控制多智能体群的动态系统模型已经证明了在弹性、分散式导航算法方面的进展。我们之前介绍了NeuroSwarms控制器,其中基于代理的交互通过类比神经网络交互来建模,包括吸引子动力学 和相位同步,这已经被理论化为在导航啮齿动物的海马位置细胞回路中操作。这种复杂性排除了通常使用的稳定性、可控性和性能的线性分析来研究传统的蜂群模型此外�