Python之paramiko远程登录模块

通过【ctrl+alt+s】快捷键,打开设置面板,在编译环境选项中添加paramiko远程登录模块(需要连网)

paramiko是基于Python实现的SSH2远程安全连接,支持认证及秘钥方式。可以实现远程命令执行、文件传输、之间SSH代理等功能,相对于pexpect,封装的层次更高,更贴近SSH协议的功能。基于ssh用于连接远程服务器做操作:可以远程执行命令和上传/下载文件。

一、paramiko远程密码连接

import paramiko

# 创建一个ssh对象
client = paramiko.SSHClient()

# 自动选择yes
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接服务器
client.connect(
    hostname='172.25.31.110',
    username='root',
    password='redhat'
)

# 执行操作
# 标准输入 标准输出 标准错误
stdin,stdout,stderr = client.exec_command('route -n')   #在远程主机上执行的命令

# 获取命令的执行结果
print(stdout.read().decode('utf-8'))

# 关闭连接
client.close()

二、paramiko批量连接主机

from paramiko.ssh_exception import NoValidConnectionsError,AuthenticationException

def connect(cmd,hostname,user,password):
    import paramiko
    client = paramiko.SSHClient()
    #SSHClient类是SSH服务会话的高级表示,该类封装了传输、通道及SFTPClient的校验、建立的方法。
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy)

    try:
        client.connect(
            hostname=hostname,
            username=user,
            password=password
        )
        stdin,stdout,stderr = client.exec_command(cmd)  #标准输入输出
        # a = stdout.read().decode('utf-8')   #解码
        print(stdout.read().decode('utf-8'))
        # return a          #返回主机名
        return hostname     #返回ip
    except NoValidConnectionsError as e:
        return '主机%s连接失败' %(hostname)
    except AuthenticationException as e:
        return '主机%s密码错误' %(hostname)
    except Exception as e:
        return '未知错误:',e
    finally:
        client.close()

with open('/tmp/hosts') as f:
    for line in f:
        hostname,username,password = line.strip().split(':')
        res = connect('hostname',hostname,username,password)
        print('主机名:',res)

Python之paramiko远程登录模块_第1张图片

三、paramiko上传下载

from paramiko.ssh_exception import NoValidConnectionsError,AuthenticationException
import paramiko

#       主机名     密码     远程主机源文件  本地
def put(hostname,password,source_name,target_name): #上传本地文件到远程SFTP服务端
    try:
        transport = paramiko.Transport((hostname,22))
        transport.connect(username='root',password=password)
        sftp = paramiko.SFTPClient.from_transport(transport)    #创建一个已经连通的SFTP客户端通道
    #SFTPClient作为一个SFTP客户端对象,根据SSH传输协议的sftp回话,实现远程文件操作,比如文件上传、下载、权限、状态等操作。

    except AuthenticationException as e:
        return '主机%s密码错误' %(hostname)
    except Exception as e:
        return '未知错误:',e
    else:
        # sftp.put(source_name,target_name)
        sftp.get(source_name,target_name)   #下载文件到本地
    finally:
        transport.close()

put('172.25.31.110','redhat','/mnt/xing','/tmp/westos')

远程登录172.25.31.110主机,将该主机中的/mnt/xing文件,上传到本地/tmp目录中的westos文件里

你可能感兴趣的:(paramiko远程密码连接,paramiko批量连接主机,paramiko上传下载)