一、介绍
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服务器进行自动化操作。通过本文的介绍,相信您已经可以灵活运用该方法进行开发工作了。