【python】之paramiko库操作Linux完成远程控制以及SFTP文件传输

paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。

由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系列的操作时,paramiko是最佳工具之一。

一.paramiko模块的安装

这边使用pip的方式进行安装

二.实际应用

1.远程控制,输入输出指令获取想要的数据

import paramiko

###创建SSH对象
ssh=paramiko.SSHClient()

###允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
time.sleep(1)

####连接到服务器,hostname为服务器的IP地址,port为端口号,username为用户名,password为密码.
try:
    ssh.connect(hostname='192.168.20.100', port=22, username='root', password='root', compress=True)

###这边应用实际案例,做了一个判断来检查是否连接上服务器
except:
    tkinter.messagebox.showinfo('错误','查看环境是否配置正确!')
 
###激活terminal,invoke_shell()函数类似shell终端,可以将执行结果分批次返回  
channel = ssh.invoke_shell()
command = ""

###向服务器发送命令
channel.send(command + 'ls \n') 
time.sleep(1)

###接收服务器的返回值,并打印输出
stdout = channel.recv(1024*100000)
time.sleep(3) 
out_list = stdout.decode().split("\n")
time.sleep(3)
print(out_list)
time.sleep(1)

###关闭服务器连接
ssh.close()

返回值为:

###可以按照想要输入的指令来获取相对应的数据,并提取出来数据

2.ftp文件传输

import paramiko

###创建SSH对象
ssh=paramiko.SSHClient()

###允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
time.sleep(1)

####连接到服务器,hostname为服务器的IP地址,port为端口号,username为用户名,password为密码.
try:
    ssh.connect(hostname='192.168.20.100', port=22, username='root', password='root', compress=True)

###这边应用实际案例,做了一个判断来检查是否连接上服务器
except:
    tkinter.messagebox.showinfo('错误','查看环境是否配置正确!')

localdeb = r'machine_etag.bin' #Windows下文件路径(需复制的文件)
debpath = '/home/user/' #Linux目录
debname = 'machine_etag.bin' #软件包完整名称

#将本地文件传至Linux中
sftp = paramiko.SFTPClient.from_transport(ssh)
sftp.put(localdeb, debpath + debname)

client= paramiko.SSHClient()
client._transport=ssh

#列出Linux目录中的文件,以便检查是否传送成功
print('上传完成!' + debpath +' 下有如下文件:')
lscmd = 'ls -l ' + debpath;
stdin, stdout, stderr = client.exec_command(lscmd)
print(stdout.read().decode('utf-8'))

#在Linux上安装deb软件
print('安装 ' + debpath + debname)

installcmd = 'dpkg -i ' + debpath + debname
stdin, stdout, stderr = client.exec_command(installcmd)
print(stdout.read().decode('utf-8'))

#检查Linux系统中软件是否安装成功
print('安装结果: ')
stdin, stdout, stderr = client.exec_command('dpkg -s xxx')
print(stdout.read().decode('utf-8'))

###关闭连接
client.close()

返回值:

###这样就能完成windows和Linux文件的互传了

@Neng

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

==PP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值