SSH协议的Python实现paramiko

paramiko安装

SSH是一个协议,paramiko 是一个Python 的库,该库支持sshv2协议,实现了对远程服务器执行操作

安装命令:

pip3 install paramiko

SSHClient类与SFTPClient类

paramiko包含两个核心组建,分别是SSHClient和SFTPClient

  • SSHClient:类似于Linux下的ssh命令,用于执行远程命令。
  • SFTPClient:类似于Linux下的sftp命令,实现远程文件操作

SSHClient类的方法

  • connect:实现远程连接认证,只有hostname 是必传参数
connect(self,hostname,port=22,username=None,password=None,
        pkey=None,key_filename=None,timeout=None,
        allow_agent=True,look_for_keys=True,compress=False)
  • set_missing_host_key_poilcy:设置没有做免密的主机应对的策略
  • exec_command:在远程服务器上执行命令的方法
  • open_sftp:在远程服务器上打开sftp回话

SFTPClient类的方法

  • put:上传文件
  • get:下载文件
  • mkdir:创建目录
  • remove:移除文件
  • rmdir:删除目录
  • rename:重命名文件/目录
  • stat:查看文件详细信息
  • listdir:列出指定目录下的文件内容

paramiko的基本使用

paramiko.SSHClient两种认证方式

在执行远程服务器操作之前,首先需要连接远程服务器并进行认证。

paramiko 与 ssh命令一样,支持密码认证和秘钥认证两种方式

使用密码认证

import paramiko

ip = "192.168.32.130"
port = 22
user = "root"
pwd = "123456"

# 使用密码认证
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh.connect(ip,port,user,pwd)

使用秘钥认证

import paramiko

ip = "192.168.32.130"
port = 22
user = "root"
pwd = "123456"

# 使用密钥认证
ssh = paramiko.SSHClient()
ssh.connect(ip,port,user,key_filename="私钥文件")

使用方法

远程执行命令

import paramiko

ip = "192.168.32.130"
port = 22
user = "root"
pwd = "123456"

### 远程执行命令
ssh = paramiko.SSHClient()
# 自动添加免密
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接远程主机
ssh.connect(ip,port,user,pwd)

command = input("请输入你要执行的命令").strip()
# 接收输出结果
stdin,stdout,stderr = ssh.exec_command(command)
res = stdout.readlines() + stderr.readlines()
for line in res:
    print(line.strip())
ssh.close()

上传文件到远程机器

import paramiko

ip = "192.168.32.130"
port = 22
user = "root"
pwd = "123456"

t = paramiko.Transport((ip,port))
t.connect(username=user,password=pwd)
sftp = paramiko.SFTPClient.from_transport(t)
# 上传至远程服务器的目录/文件
remotepath = "/tmp/test1.txt"
# 本地的一个文件
localpath = "/tmp/test.txt"
# 上传
sftp.put(localpath,remotepath)
t.close()

从远程机器下载文件

import paramiko

ip = "192.168.32.130"
port = 22
user = "root"
pwd = "123456"

t = paramiko.Transport((ip,port))
t.connect(username=user,password=pwd)
sftp = paramiko.SFTPClient.from_transport(t)
# 上传至远程服务器的目录/文件
remotepath = "/tmp/test1.txt"
# 本地的一个文件
localpath = "/tmp/test.txt"
# 下载
sftp.get(remotepath,localpath)
t.close()

posted @ 2019-10-25 21:39  GeminiMp  阅读(680)  评论(0编辑  收藏  举报