python的paramiko模块实现远程控制和传输示例

yipeiwu_com7年前Python基础

本文介绍了python的paramiko模块实现远程控制和传输示例,分享给大家,具体如下:

1 安装

sudo pip install paramiko

2 ssh实现远程控制

#LINUX下执行shell
ssh username@ip #输入密码后就可以对远程机器进行操作
ssh username@ip command #输入密码后远程机器就执行command

ssh运行后,想退出,可以kill掉ssh进程。

3 paramiko实现ssh

import paramiko
hostname = '10.1.111.111'
username = 'root'
password = '111111'
port = 22 #整数不是字符串
paramiko.util.log_to_file('paramiko.log')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允许连接不在know_hosts文件中的主机
ssh.connect(hostname=hostname,port=port,username=username,password=password)
stdin, stdout, stderr = ssh.exec_command("ls") #远程执行shell命令
print(stdout.readlines()) #输出回显结果
ssh.close()

exec_command命令,以分号;分隔表示先后执行两个命令;可以传入多个参数; exec_command为单个会话,执行完成之后会回到登录时的缺省目录,如下:

a='~/Videos'
b='aaa'
ssh.exec_command('cd %s;mkdir %s'%(a,b)) #aaa在a目录下
ssh.exec_command('mkdir aaa') #aaa在缺省目录下

远端执行命令时如果有交互,可以这样用 stdin.write(“”)来完成。

注意:

(1)sudo后要加-S,表示从stdin接收密码;

(2)stdin.write(‘password\n')最后要加\n作为命令的结束,否则服务器一直等待;

(3) flush()写入的缓冲( flush() any buffer you're writing to )

stdin, stdout, stderr = ssh.exec_command('sudo -S ls')
stdin.write('password\n')
stdin.flush()

可以利用多进程或线程可以批量执行命令:

import paramiko
import threading

def ssh_cmd(ip,port,username,passwd,cmd):
  ssh = paramiko.SSHClient()
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  ssh.connect(ip,port,username,passwd)
  for m in cmd:
    stdin, stdout, stderr = ssh.exec_command(m)
    print(stdout.readlines()) 
  ssh.close()

if __name__=='__main__':
  cmd = ['ls','ifconfig']   
  a=threading.Thread(target=ssh_cmd,args=(ip,port,username,passwd,cmd))
  a.start() 
  a.join()

4 远程传输文件

scp从本地服务器复制到远程服务器

scp local_file remote_username@remote_ip:remote_file

指定了用户名,命令执行后需要输入用户密码;如果不指定用户名,命令执行后需要输入用户名和密码; 从远处复制文件到本地

scp remote_username@remote_ip:remote_file local_file 

5 paramiko实现远程传输文件

新建一个SFTPClient对象,该对象复用之前的SSH连接,因此,我们使用sftp传输文件时,不需要再次进行用户认证。实现文件

上传:

sftp = paramiko.SFTPClient.from_transport(ssh.get_transport())
#sftp = ssh.open_sftp() #两者选其一即可
sftp.put('bbb.c','aaa.c') #文件上传并重命名
sftp.close()

或者以下实现文件上传和下载:

import paramiko
t=paramiko.Transport((hostname,port))
t.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(t) 
sftp.put('bbb.c','aaa.c') #文件上传并重命名
sftp.get('m.py', 'mm.py')#文件下载并重命名
t.close()

官方文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

python 寻找优化使成本函数最小的最优解的方法

今天来学习变量优化问题。寻找使成本函数最小的题解。适用于题解相互独立的情况,设计随机优化算法、爬山法、模拟退火算法、遗传算法。 优化问题的的精髓是:1、将题解转化为数字序列化,可以写出题...

python 实现语音聊天机器人的示例代码

python 实现语音聊天机器人的示例代码

前言 在不远的将来,实现一定程度上的语音支持将成为日常科技的基本要求,整合了语音识别的python程序提供了其他技术无法比拟的交互性和可访问性。最重要的是,在python程序中实现语音识...

Python中使用装饰器和元编程实现结构体类实例

Ruby中有一个很方便的Struct类,用来实现结构体。这样就不用费力的去定义一个完整的类来仅仅用作访问属性。 复制代码 代码如下: class Dog < Struct.new(...

浅析Windows 嵌入python解释器的过程

这次主要记录在windows下嵌入 python 解释器的过程,程序没有多少,主要是头文件与库文件的提取。 程序平台:windows10 64 bit、 Qt 5.5.1  M...

基于Python的微信机器人开发 微信登录和获取好友列表实现解析

基于Python的微信机器人开发 微信登录和获取好友列表实现解析

首先需要安装itchat库,可以pip install itchat安装,也可以在pycharm里安装 # -*- coding:utf-8 -*- __author__ = "Mu...