zoukankan      html  css  js  c++  java
  • paramiko实现登录主机

    Paramiko模块使用
    
    实现目的:192.168.0.61通过Paramiko模块登录192.168.0.63
    
    
    一、下载安装
    
    由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto
    
    pip install pycrypto
    pip install paramiko
    
    
    二、模块使用
    
    1、SSHClient 用于连接远程服务器并执行基本命令
    
    (1)基于用户名密码连接:
    
    #!/usr/bin/python
    #-*- codinig: UTF-8 -*-
    
    import paramiko
    
    transport = paramiko.Transport(('192.168.0.63', 22))
    transport.connect(username='root', password='123')
    
    ssh = paramiko.SSHClient()
    ssh._transport = transport
    
    stdin, stdout, stderr = ssh.exec_command('sed -i s/hello/hi/g /home/b.sh')
    print (stdout.read())
    
    transport.close()
    
    
    
    (2)基于公钥密钥连接:
    
    前提已经生产公钥,而且公钥拷贝到了192.168.0.63这台上
    
    #!/usr/bin/python
    # -*- coding:UTF-8 -*-
    import paramiko
    private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
    transport = paramiko.Transport(('192.168.0.63', 22))
    transport.connect(username='root', pkey=private_key)
    ssh = paramiko.SSHClient()
    ssh._transport = transport
    
    stdin, stdout, stderr = ssh.exec_command('ifconfig')
    print (stdout.read())
    transport.close()
    
    
    
    
    2、SFTPClient用于连接远程服务器并执行上传下载
    
    
    (1)基于用户名密码上传下载:
    
    import paramiko
       
    transport = paramiko.Transport(('192.168.0.63',22))
    transport.connect(username='root',password='123')
       
    sftp = paramiko.SFTPClient.from_transport(transport)
     
    # 将/home/b.sh 上传至服务器 /home/b.sh
    sftp.put('/home/b.sh', '/home/b.sh')
     
    # 将remove_path 下载到本地 local_path
    sftp.get('/home/b.sh', '/home/b.sh')
    transport.close()
    
    
    
    (2)基于公钥密钥上传下载:
    
    
    # -*- coding:UTF-8 -*-
    import paramiko
    private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
    transport = paramiko.Transport(('192.168.0.63', 22))
    transport.connect(username='root', pkey=private_key )
    sftp = paramiko.SFTPClient.from_transport(transport)
    # 将/home/b.sh 上传至服务器 /home/b.sh
    sftp.put('/home/b.sh', '/home/b.sh')
    # 将remove_path 下载到本地 local_path
    sftp.get('/home/b.sh', '/home/b.sh')
    transport.close()
    
    
    
    
    3、实例:通过transport实现远程执行命令和上传文件
    
    
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import paramiko
    class SSHConnection(object):
        def __init__(self, host='192.168.0.63', port=22, username='root',pwd='123'):
            self.host = host
            self.port = port
            self.username = username
            self.pwd = pwd
            self.__k = None
    
        def run(self):
            self.connect()
            pass
            self.close()
        def connect(self):
            transport = paramiko.Transport((self.host,self.port))
            transport.connect(username=self.username,password=self.pwd)
            self.__transport = transport
        def close(self):
            self.__transport.close()
        def cmd(self, command):
            ssh = paramiko.SSHClient()
            ssh._transport = self.__transport
            # 执行命令
            stdin, stdout, stderr = ssh.exec_command(command)
            # 获取命令结果
            result = stdout.read()
            return result
        def upload(self,local_path, target_path):
            # 连接,上传
            sftp = paramiko.SFTPClient.from_transport(self.__transport)
            # 将location.py 上传至服务器 /tmp/test.py
            sftp.put(local_path, local_path)
    ssh = SSHConnection()
    ssh.connect()
    r1 = ssh.cmd('df')
    print(r1.decode())
    #ssh.upload('test.py', "/root/test.py")
    ssh.upload("/home/b.sh", "/home/b.sh")
    ssh.close()
    
    
    
    参照:
    
    https://www.cnblogs.com/xiaozhiqi/p/5814564.html
    
    https://www.2cto.com/kf/201805/746279.html
    
    https://blog.csdn.net/ywq935/article/details/78816860
    
    https://blog.csdn.net/opera95/article/details/72824006
     
  • 相关阅读:
    jquery关于attr和prop的差异
    C# Request.RawUrl与Request.Url的区别
    sqlserver 分区排序之partition
    asp.net core webapi iis jquery No 'Access-Control-Allow-Origin' header is present on访问跨域问题
    .netcore webapi iis 虚拟目录下载apk文件
    VSCode一直弹框错误Linter pylint is not installed
    c# ?. 空值传播运算符
    Angular5学习札记
    webstorm 打包angular Module build failed: Error: No PostCSS Config found
    js中被调用的函数获取调用者对象
  • 原文地址:https://www.cnblogs.com/effortsing/p/10340440.html
Copyright © 2011-2022 走看看