Python paramiko recv 超过65535
时间: 2023-08-14 22:22:26 浏览: 350
在使用 Python 的 paramiko 库进行 SSH 连接时,由于 SSH 协议的限制,一次性接收的数据大小也受到了限制。在 paramiko 中,可以使用 `recv()` 方法来接收数据,但一次性最多只能接收 65535 个字节的数据。如果需要接收更多的数据,可以使用多次 `recv()` 操作来分批接收。
以下是一个示例代码,可以将多次 `recv()` 操作的结果拼接起来,以获取超过 65535 个字节的数据:
```python
import paramiko
# 创建 SSH 连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username='username', password='password')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('command')
# 接收数据
data = b''
while True:
buf = stdout.channel.recv(65535)
if not buf:
break
data += buf
# 输出结果
print(data.decode())
```
在该示例代码中,我们首先通过 `exec_command()` 方法执行了一条命令,然后使用 `recv()` 方法分批接收了命令执行的结果,最后将所有结果拼接起来并输出。
此外,如果需要一次性发送超过 65535 个字节的数据,也可以使用 SSH 协议的分段机制,将数据分为多个小段进行发送。在 Python 中,可以使用 `Channel.sendall()` 方法来实现这一点。以下是一个示例代码:
```python
import paramiko
# 创建 SSH 连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username='username', password='password')
# 发送大量数据
data = b'...' * 1000000
stdin, stdout, stderr = ssh.exec_command('command')
stdin.channel.sendall(data)
```
在该示例代码中,我们将 100 万字节的数据分为多个小段,每次发送 65535 个字节的数据,直到数据全部发送完毕。
阅读全文