堡垒机初识--paramiko模块

一、paramiko模块

  Python的paramiko模块基于SSH用于连接远程服务器并执行相关的操作。

  1.1 在windows上安装paramiko模块

  测试环境: win10 , python3.5 并且已安装 pip

  在命令窗口,切换到 python 安装目录中的 Scripts

  执行: pip install paramiko

  检测: import paramiko 

二、SSHClient

  2.1 基于用户名密码连接  

import paramiko

'''
   用于连接远程服务器,并执行命令
'''

# 创建SSH对象
ssh = paramiko.SSHClient()

# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接服务器
ssh.connect(hostname='172.16.200.30', port=22, username='root', password='111111')

# 执行命令
stdin, stdout, stderr = ssh.exec_command('ls&&df')

# 获取命令结果
# 三元运算
res, err = stdout.read(), stderr.read()
result = res if res else err
print(result.decode())

# 关闭连接
ssh.close()

  输出

   

  1. stdin =>  标准输入,就是你输入的那个命令
  2. stdout => 标准输出,你输入命令后执行的结果
  3. stderr => 标准错误,名利执行的过程中,如果出错了,就把这个错误打到这里

   2.2 基于公钥秘钥连接

          其实很上面用密码登入没什么区别,只是不用写明文密码了

import paramiko

private_key = paramiko.RSAKey.from_private_key_file(r'G:pythonuntitledstudy9ceshi')

# 创建SSH对象
ssh = paramiko.SSHClient()

# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接服务器
ssh.connect(hostname='172.16.200.30', port=22, username='root', pkey=private_key)

# 执行命令
stdin, stdout, stderr = ssh.exec_command('ls')

# 获取命令结果
# 三元运算
res, err = stdout.read(), stderr.read()
result = res if res else err
print(result.decode())

# 关闭连接
ssh.close()

  输出

004776
1
_1748
anaconda-ks.cfg
monitor
npm-debug.log

  2.3 SSHClietn封装了transport

# -*- coding: UTF-8 -*-

# SSHClient 封装了Transport

import paramiko

transport = paramiko.Transport(('172.16.200.30', 22))
transport.connect(username='root', password='111111')

ssh = paramiko.SSHClient()
ssh._transport = transport

# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')

res, err = stdout.read(), stderr.read()
result = res if res else err
print(result.decode())

transport.close()

  基于秘钥

# SSHClient 封装了Transport

import paramiko

private_key = paramiko.RSAKey.from_private_key_file(r'G:pythonuntitledstudy9ceshi')

transport = paramiko.Transport(('172.16.200.30', 22))
transport.connect(username='root', pkey=private_key)

ssh = paramiko.SSHClient()
ssh._transport = transport

# 执行命令
stdin, stdout, stderr = ssh.exec_command('ds')

res, err = stdout.read(), stderr.read()
result = res if res else err
print(result.decode())

transport.close()

  

三、SFTPClient

  用于连接远程服务器并执行上传和下载

  3.1 基于用户名和密码

import paramiko

transport = paramiko.Transport(('172.16.200.30', 22))
transport.connect(username='root', password='111111')

sftp = paramiko.SFTPClient.from_transport(transport)

# 将本地文件上传至服务器
sftp.put(r'G:pythonuntitledstudy9ceshi', '/tmp/ceshi')

# 将远程服务器的文件下载至本地
sftp.get('/tmp/test.txt', r'G:pythonuntitledstudy9	est_linux.txt')

transport.close()


#注:
上传和下载的路径必须是全路径,即必须把文件名也加上,不能只写目录名

  3.2 基于公钥和私钥上传和下载

  同样改变不多

import paramiko

# 秘钥
private_key = paramiko.RSAKey.from_private_key_file(r'G:pythonuntitledstudy9ceshi')

transport = paramiko.Transport(('172.16.200.30', 22))
transport.connect(username='root', pkey=private_key)

sftp = paramiko.SFTPClient.from_transport(transport)

# 将本地文件上传至服务器
sftp.put(r'G:pythonuntitledstudy9ceshi', '/tmp/ceshi')

# 将远程服务器的文件下载至本地
sftp.get('/tmp/test.txt', r'G:pythonuntitledstudy9	est_linux.txt')

transport.close()

  

原文地址:https://www.cnblogs.com/bigberg/p/7800784.html