在使用paramiko执行远程命令时,可以使用invoke_shell()方法开启一个交互式的shell,然后使用send()方法发送命令,接着使用recv()方法获取命令执行的结果。如果出现命令执行未结束,可以使用send()方法发送相应的命令进行继续操作。
时间: 2023-06-02 11:03:46 浏览: 173
这个问题属于技术类问题,我可以回答。你的理解是正确的,可以使用 paramiko 库中的 invoke_shell() 方法开启一个交互式的 shell,并使用 send() 方法发送命令,再使用 recv() 方法获取命令执行的结果。如果命令执行未结束,可以使用 send() 方法发送相应的命令进行继续操作。
相关问题
使用paramiko中的invoke_shell
使用paramiko中的invoke_shell可以在远程服务器上启动一个新的交互式Shell会话。以下是一个简单的示例:
```python
import paramiko
# 创建SSH客户端对象
ssh = paramiko.SSHClient()
# 允许连接未知的主机(默认是RejectPolicy)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到远程服务器
ssh.connect(hostname='remote_server', username='username', password='password')
# 打开一个新的Shell会话
channel = ssh.invoke_shell()
# 发送命令
channel.send('ls -l\n')
# 接收输出
output = channel.recv(1024)
# 打印输出
print(output)
# 关闭连接
ssh.close()
```
在以上示例中,我们首先使用paramiko创建一个SSH客户端对象,并使用`set_missing_host_key_policy`方法设置连接未知主机时的策略为`AutoAddPolicy`。然后使用`connect`方法连接到远程服务器。
接下来,我们使用`invoke_shell`方法打开一个新的Shell会话,并使用`channel.send`方法发送一个简单的`ls -l`命令。然后使用`channel.recv`方法接收输出,并将其打印出来。
最后,我们使用`close`方法关闭SSH连接。
通过面向对象编程思想使用paramiko中的invoke_shell
好的,使用面向对象编程思想来使用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编码的字符串并打印出来。