Python3:paramiko

介绍

1、paramiko基于SSH用于连接远程服务器并执行相关操作
2、SSHClient是远程连接,SFTPClinet上传下载服务
3、使用该模块可以对远程服务器进行命令或文件操作
4、fabric和ansible内部的远程管理就是使用的paramiko来现实

SSHClient使用

SSHClient:
远程连接分为两种:1、基于用户名密码连接 2、基于公钥秘钥连接
通过paramiko远程操作,其实本质也分为两种:1、只用SSHClient 2、自己创建一个transport

一、基于用户名和密码的连接:

import paramiko

ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='127.0.0.1', port=22, username='User', password='wch+158461')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('dir')
# 获取命令结果
result = stdout.read()
# 关闭连接
ssh.close()

二、SSHClient 封装 Transport:

import paramiko

transport = paramiko.Transport('127.0.0.1', 22)
transport.connect(username='User', password='wch+158461')
ssh = paramiko.SSHClient()
ssh._transport = transport

stdin, stdout, stderr = ssh.exec_command('dir')
print(stdout.read())
transport.close()

SFTPClient使用

说明:用于连接远程服务器并进行上传下载。

一、基于用户名密码上传下载:

import paramiko

transport = paramiko.Transport('127.0.0.1', 22)
transport.connect(username='User', password='wch+158461')
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put('E:\logcat.txt', 'E:\A\ABC.txt')
transport.close()

学习来源:https://www.cnblogs.com/lzc978/p/10978688.html

代码逐条解说:

创建sshclient

ssh = paramiko.SSHClient() 

目的是接受不在本地Known_host文件下的主机

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

connect函数可以接受很多参数,本例只列举4个主要的其他参数请见文档

ssh.connect(ip, port, username, passwd)

exec_command参数使用只需要执行一次的命令,因为执行完该命令以后,shell会自动回到ssh初始连接的shell状态下,(表达不好,可以看官方文档。),stdin,out,err,对应shell下的标准输入,输出和错误

stdin,stdout,stderr = ssh.exec_command(cmd, bufsize, timeout)

这样通过标准输入输入命令

stdin.write('y'+'\n')

输出标准输出

rint stdout.read()
exec_command(command, bufsize=-1, timeout=None, get_pty=False)

在SSH server上执行命令,打开新的channel并执行命令,该命令返回的input,output数据流都是file-like对象。可以使用read,readline,readlines方法来将file-like数据变成string类型。
在SSH server端创建一个交互式的shell,且可以按自己的需求配置伪终端,可以在invoke_shell()函数中添加参数配置。

chan = ssh.invoke_shell()

利用send函数发送cmd到SSH server,添加’\n’做回车来执行shell命令。注意不同的情况,如果执行完telnet命令后,telnet的换行符是\r\n

chan.send(cmd+'\n')

通过recv函数获取回显

chan.recv(bufsize)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值