python paramiko 怎么实现实时交互
时间: 2023-04-06 09:00:40 浏览: 155
可以使用 paramiko 的 Channel 类的 invoke_shell() 方法来实现实时交互。具体实现步骤如下:
1. 创建 SSHClient 对象,连接远程服务器。
2. 使用 SSHClient 对象的 invoke_shell() 方法创建 Channel 对象。
3. 使用 Channel 对象的 send() 方法发送命令。
4. 使用 Channel 对象的 recv() 方法接收命令输出。
示例代码如下:
```
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username='username', password='password')
channel = ssh.invoke_shell()
channel.send('ls\n')
while True:
if channel.recv_ready():
output = channel.recv(1024)
print(output.decode())
else:
continue
```
以上代码会连接到远程服务器,发送 `ls` 命令,并实时输出命令的结果。
相关问题
python paramiko 实时交互
### 回答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交互。
python paramiko 获取标准输入
`paramiko`是一个Python库,用于连接并控制SSH服务器,但它本身并不直接支持获取标准输入。如果你想通过SSH连接获取远程主机的标准输入,你需要先创建一个`paramiko.Transport`对象,然后建立会话(`Session`),接着你可以使用`stdin`属性来读取或发送数据。
以下是基本步骤:
```python
import paramiko
# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到远程主机
host, port, username, password = 'your_host', 22, 'your_username', 'your_password'
ssh.connect(host, port=port, username=username, password=password)
# 打开一个会话并获取标准输入
session = ssh.invoke_shell() # 创建一个shell通道
stdin_data = session.recv(1024) # 等待接收数据,这里可能会阻塞直到有输入
# 处理接收到的数据
print("Received from remote host:", stdin_data.decode('utf-8'))
# 关闭连接
session.close()
ssh.close()
```
如果你需要从本地获取用户输入并发送到远程主机,你应该在本地进行操作,然后再通过`stdin`发送:
```python
# 在用户交互环节,获取本地用户的输入
local_input = input("Enter something: ")
# 将输入发送到远程主机
session.send(local_input.encode('utf-8'))
```
阅读全文