您的位置:

paramiko库中invoke_shell()方法的详解

一、介绍

paramiko库是Python编写的用于SSHv2协议的安全连接的库,支持SSH文件传输( SFTP )和SSH连接远程服务器并执行命令。

与其他库相比,paramiko使用简单,同时功能强大。其中,可以在SSH通道上的远程服务器上执行命令是一个非常重要的功能。

paramiko的invoke_shell()方法就是在SSH通道上的远程服务器上执行命令的重要方法之一,本文将详细介绍该方法的使用和应用。

二、方法参数和返回值

函数格式为:invoke\_shell(term='vt100', width=80, height=24, width\_pixels=0, height\_pixels=0)

其中,term表示终端类型,width表示终端的字符列宽度,height表示终端的行高度,width_pixesl和height_pixels表示终端的像素宽度和像素高度。如果这些参数没有被指定,那么将使用默认值。

该方法的返回值为一个类型为channel的对象。该channel对象提供了一系列的方法(如recv、send等等)用于与SSH通道进行交互。

三、使用方法介绍

1. 创建SSH连接并登录远程服务器

import paramiko

ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname="127.0.0.1", port=22, username="username", password="password")

其中,创建ssh_client对象后,需要设置其“missing host key policy”为AutoAddPolicy。否则,当连接主机的密钥不可用时,该连接将被拒绝。

AutoAddPolicy表示自动添加远程主机密钥,相当于告诉SSH客户端,如果远程机器不在已知主机列表中,就自动添加,并信任它的密钥。

2. 调用invoke_shell()方法,获取channel对象

channel = ssh_client.invoke_shell()

调用invoke_shell()方法返回的channel对象是一个标识SSH通道的对象。该方法返回的对象可以用于与SSH通道互动,发送和接受数据。

3. 发送和接收数据

channel.send(b'echo "Hello World!"\n')

output = ""
while not channel.recv_ready():
    time.sleep(0.1)
while channel.recv_ready():
    output += channel.recv(1024).decode("utf-8")

print(output)

上面的代码演示了如何使用invoke_shell()方法发送和接收数据。在这个例子中,先发送了一条命令给远程服务器,然后循环读取服务器的返回结果,并将结果打印出来。

4. 关闭SSH通道

channel.close()
ssh_client.close()

最后,不要忘记关闭SSH通道,否则会占用连接资源。

四、总结

本文介绍了paramiko库中invoke_shell()方法的详解,掌握该方法可以帮助您使用Python对SSH服务器进行自动化操作。通过本文的介绍,相信您已经可以灵活运用该方法进行开发工作了。