paramiko介绍及使用说明
1. 什么是Paramiko?
Paramiko是一个用于在Python中进行SSH2协议网络连接的模块。它提供了客户端和服务器功能,允许使用安全的SSH协议进行远程服务器的命令执行、文件传输和密钥管理等操作。Paramiko广泛应用于系统管理、自动化任务和远程服务器管理等场景。
2. 官方文档
Paramiko的官方文档提供了详细的安装、配置和使用指南。你可以在以下链接找到官方文档:
Paramiko 官方文档
3. 安装
你可以使用pip来安装Paramiko模块:
pip install paramiko
4. 基本使用
下面是一些常见的Paramiko使用示例,包括如何进行SSH连接、执行远程命令和文件传输等。
4.1 SSH连接和执行远程命令
import paramiko
# 创建SSH客户端
ssh = paramiko.SSHClient()
# 自动添加主机到known_hosts文件中
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接远程服务器
ssh.connect(hostname='your_server_ip', port=22, username='your_username', password='your_password')
# 执行远程命令
stdin, stdout, stderr = ssh.exec_command('ls -l')
print(stdout.read().decode())
# 关闭连接
ssh.close()
4.2 文件传输(SFTP)
import paramiko
# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='your_server_ip', port=22, username='your_username', password='your_password')
# 创建SFTP客户端
sftp = ssh.open_sftp()
# 上传文件
sftp.put('local_file.txt', 'remote_file.txt')
# 下载文件
sftp.get('remote_file.txt', 'local_file.txt')
# 关闭SFTP和SSH连接
sftp.close()
ssh.close()
4.3 使用私钥进行认证
import paramiko
# 加载私钥
private_key = paramiko.RSAKey.from_private_key_file('path_to_your_private_key')
# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 使用私钥连接远程服务器
ssh.connect(hostname='your_server_ip', port=22, username='your_username', pkey=private_key)
# 执行远程命令
stdin, stdout, stderr = ssh.exec_command('ls -l')
print(stdout.read().decode())
# 关闭连接
ssh.close()
4.4 创建交互式shell
使用Paramiko创建交互式shell可以让你在远程服务器上运行多个命令并读取它们的输出。
# 创建交互式 shell 会话,使用 Paramiko 的 invoke_shell() 方法。
import time
import paramiko
commands = ["whoami", "uptime", "ls -al /tmp"]
def send_command(channel, command):
channel.send(command + '\n')
def receive_output(channel):
output=''
while channel.recv_ready():
output += channel.recv(1024).decode()
return output
try:
# 创建ssh客户端
ssh = paramiko.SSHClient()
# 自动添加远程主机的SSH密钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
# 连接到远程主机
ssh.connect(hostname='your_server_ip', port=22, username='your_username', password='your_password')
# invoke_shell() 方法创建交互式shell会话
channel = ssh.invoke_shell()
for command in commands:
send_command(channel, command)
time.sleep(1)
output = receive_output(channel)
print(output)
except Exception as err:
print(err)
ssh.close()
注意事项
-
如果遇到连接问题,检查你的SSH连接参数(hostname、port、username、password)是否正确。
-
确保你有足够的权限在远程服务器上执行这些命令。