Paramiko模块,用python代码连接服务器执行命令

目录

  • Paramiko模块

    • 安装
    • 基本使用
    • 链接--用户名和密码的方式
    • 连接--公钥私钥的方式
    • 上传下载文件
    • paramiko代码封装
    • 面试题

Paramiko模块

通过ssh远程链接服务器并执行响应的操作,类似于XShell

ps:ansible批量管理服务器工具,底层用的就是paramiko模块

安装

pip3 install paramiko

基本使用

远程链接服务器的方式

  • 用户名和密码
  • 公钥私钥的方式

paramiko上面两种方式都支持

链接--用户名和密码的方式

import paramiko

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许链接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 链接服务器  用户名和密码的方式
ssh.connect(hostname=‘10.0.0.200‘,port=22,username=‘root‘,password=‘123456‘)

# 执行命令
stdin, stdout, stderr = ssh.exec_command(‘ls /‘)
"""
stdin可以用来输入额外的命令
stdout,stderr  正确和错误的返回结果
"""
res = stdout.read()
print(res.decode(‘utf-8‘))

# 关闭链接
ssh.close()

连接--公钥私钥的方式

"""
首先你得生成你本地的公钥和私钥
以mac为例
1.生成
ssh-keygen -t rsa
2.将公钥拷贝到远程服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@服务器地址
3.查看私钥
cat ~/.ssh/id_rsa
"""
# 公钥和私钥(先讲公钥保存到服务器上)
import paramiko

# 读取本地私钥
private_key = paramiko.RSAKey.from_private_key_file(‘a.txt‘)

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname=‘172.16.219.173‘, port=22, username=‘root‘, pkey=private_key)

# 执行命令
stdin, stdout, stderr = ssh.exec_command(‘ls /‘)
# 获取命令结果
result = stdout.read()
print(result.decode(‘utf-8‘))
# 关闭连接
ssh.close()

上传下载文件

# 用户名和密码的方式
import paramiko

# 用户名和密码
transport = paramiko.Transport((‘10.0.0.200‘, 22))
transport.connect(username=‘root‘, password=‘123456‘)

sftp = paramiko.SFTPClient.from_transport(transport)

# 上传文件
sftp.put("a.txt", ‘/data/b.txt‘)  # 注意上传文件到远程某个文件下 文件目录必须存在

# 下载文件
# sftp.get(‘远程服务器文件路径‘, ‘本地文件路径‘)  # 将远程文件下载到本地并重新命令
transport.close()

# 公钥私钥的方式
import paramiko
private_key = paramiko.RSAKey.from_private_key_file(‘a.txt‘)
transport = paramiko.Transport((‘172.16.219.173‘, 22))
transport.connect(username=‘root‘, pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
# sftp.put(‘/tmp/location.py‘, ‘/tmp/test.py‘)

# 将remove_path 下载到本地 local_path
sftp.get(‘/data/b.txt‘, ‘hahaha.txt‘)
transport.close()

paramiko代码封装

import paramiko

class SSHProxy(object):
    def __init__(self, hostname, port, username, password):
        self.hostname = hostname
        self.port = port
        self.username = username
        self.password = password
        self.transport = None

    def open(self):  # 给对象赋值一个上传下载文件对象连接
        self.transport = paramiko.Transport((self.hostname, self.port))
        self.transport.connect(username=self.username, password=self.password)

    def command(self, cmd):  # 正常执行命令的连接  至此对象内容就既有执行命令的连接又有上传下载链接
        ssh = paramiko.SSHClient()
        ssh._transport = self.transport

        stdin, stdout, stderr = ssh.exec_command(cmd)
        result = stdout.read()
        return result

    def upload(self, local_path, remote_path):
        sftp = paramiko.SFTPClient.from_transport(self.transport)
        sftp.put(local_path, remote_path)
        sftp.close()

    def close(self):
        self.transport.close()

    # with开始时自动触发
    def __enter__(self):
        # print(‘hahaha‘)
        self.open()
        return self

    # with代码块允许结束之后自动触发
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.close()

面试题

"""
题目:请在Context类中添加代码完成该类的实现
class Context:
	pass

with Context() as ctx:
	ctx.do_something()
"""
class Context:
  def __enter__(self,*args,**kwargs):
    return self

  def __exit__(self,*args,**kwargs):
    pass

  def do_something(self):
    pass

with Context() as ctx:
	ctx.do_something()

原文地址:https://www.cnblogs.com/guyouyin123/p/12699597.html

时间: 2024-10-08 00:02:22

Paramiko模块,用python代码连接服务器执行命令的相关文章

Python批量操作Linux服务器执行命令

#-*- coding: utf-8 -*- #!/usr/bin/python import paramiko import threading def ssh2(ip,username,passwd,cmd): try: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ip,远程端口,username,passwd,timeout=5) for m

python模块paramiko的上传下载和远程执行命令

#!/usr/bin/python # -*- coding: utf-8 -*- import paramiko,os,datetime server_ip = '192.168.1.123' server_user = 'root' server_passwd = '10241010' server_port = 22 #local_dir='C:\Python27' #remote_dir='/soft2/nba/' def ssh_connect(): ssh = paramiko.SS

C#通过SharpSSH库与Linux服务器建立SSH连接并执行命令

在Unity3D项目开发工具时需要用到SSH连接远程Linux服务器执行命令,找到SharpSSH链接库后,通过此方法就可使用.   /// <summary>     /// SSH登录远程Linux服务器,并运行指令     /// </summary>     /// <param name="host">远程Linux服务器IP或域名</param>     /// <param name="username&qu

Python代码是编译执行还是解释执行?

转载地址:http://blog.csdn.net/zv3e189os5c0tsknrbcl/article/details/78661641 有人在讨论 Python 代码是编译执行还是解释执行?这个问题还可以换一种说法: Python 是编译型语言还是解释型语言?回答这个问题前,我们先弄清楚什么是编译型语言,什么是解释型语言. 所谓编译执行就是源代码经过编译器编译处理,生成目标机器码,就是机器能直接运行的二进制代码,下次运行时无需重新编译.不过它是针对特定CPU体系的,这些目标代码只能在特定

python利用paramiko连接远程服务器执行命令

python中的paramiko模块是用来实现ssh连接到远程服务器上的库,在进行连接的时候,可以用来执行命令,也可以用来上传文件. 1.得到一个连接的对象 在进行连接的时候,可以使用如下的代码: def connect(host): 'this is use the paramiko connect the host,return conn' ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddP

【PYTHON模块】paramiko模块与主机SSH连接

还记得前一节做的socket和socketserver吗?写了很多实现了一个小功能,但是今天的paramiko真让人有种土枪换炮的感觉! paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平台通过SSH从一个平台连接到另外一个平台.利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输. 本文只演示paramiko连接li

关于python代码是编译执行还是解释执行

Python 是编译型语言还是解释型语言?回答这个问题前,应该先弄清楚什么是编译型语言,什么是解释型语言. 所谓编译执行就是源代码经过编译器编译处理,生成目标机器码,就是机器能直接运行的二进制代码,下次运行时无需重新编译. 不过它是针对特定CPU体系的,这些目标代码只能在特定平台执行,如果这个程序需要在另外一种 CPU 上面运行,这个代码就必须重新编译. 它不具备可移植性,但是执行速度快,C.C++这类语言属于编译型语言. 而解释型语言是在代码运行期间逐行翻译成目标机器码,下次执行时,还是需要逐

python socket连接服务器获取回显

军训回来了,皮皮..... import socket import sys try: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建一个服务器之间的连接,使用TCP连接 except socket.error as e: print("报错了?,我也很无奈啊"+e) sys.exit() host="www.baidu.com" port=80 try: jsip=socket.gethostbynam

Python脚本远程批量执行命令

摘要 本文主要写用python脚本远程连接多台服务器,然后批量执行命令,最终返回命令执行结果. 这个可以说是Ansible,Puppet等工具的最简单的雏形. 做运维的同学应该都知道的. 正文 multi_task.py #_*_coding:utf-8_*_ import  multiprocessing import paramiko import getpass import ConfigParser class MultiTask(object):     '''handles all