相信大家应该都接触过Linux操作系统(Ubuntu、Centos等),那么在使用的Linux操作系统需要使用一些远程ssh工具,尤其是公网服务器。

常用的ssh工具主要有:Xshell、MobaXterm、Termius等

上传文件到远程Linux服务器:Xftp、Filezilla 等

这些工具有免费,有收费的。并且价格小贵。今天辰哥就来教大家如何用Python连接远程Linux服务器,实现执行命令和上传文件。这里用到的Python库是Paramiko

核心知识点(亮点):

1、Python连接远程Linux服务器

2、执行命令并返回结果

3、上传文件到远程Linux服务器

4、从远程Linux下载文件

01 Paramiko库

1.安装paramiko库

在开始编写代码之前先安装一下Python连接Linux服务器的库,安装命令如下:

  1. #1、安装依赖包
  2. pip install ecdsa
  3. pip install Crypto
  4. pip install Twisted
  5. #2、安装paramiko
  6. pip install paramiko

提示:先安装三个依赖库,再安装Paramiko,直接安装Paramiko会报错。

2. paramiko核心组件

SSH组件:SSHClient,作用类似于Linux的ssh命令,用于执行远程命令。

SFTP组 件:SFTPClient,作用类似于Linux的sftp命令,用于文件上传、下载、修改文件权限等。

02 SSHClient

1、SSHClient常用方法介绍

这里辰哥以自己的远程服务器为例给大家演示,首先先连接服务器

  1. import paramiko
  2. # ip、用户名、密码
  3. ip = "远程Linux的IP地址"
  4. port = 22
  5. user = "root"
  6. password = "密码"
  7. # 创建SSHClient 实例对象
  8. ssh = paramiko.SSHClient()
  9. # 调用方法,表示没有存储远程机器的公钥,允许访问
  10. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  11. # 连接远程机器,地址,端口,用户名密码
  12. ssh.connect(ip, port, user, password, timeout=10)

执行linux命令,如:ls

  1. # 输入linux命令
  2. command1 = "ls"
  3. ssh.exec_command(command1)
  4. # stdout 为正确输出,stderr为错误输出
  5. stdin, stdout, stderr = ssh.exec_command(command2)
  6. # 输出命令执行结果
  7. result = stdout.read()
  8. print(result)

xshell返回结果:

Python执行代码结果:

2、执行多条Linux命令

上面的案例只是执行一条Linux命令,在实际应用中往往需要执行2条或者2条以上的Linux,下面演示如何执行多条命令

错误的方式

  1. # 输入linux命令
  2. command1 = "cd /www/wwwroot"
  3. command2 = "ls"
  4. ssh.exec_command(command1)
  5. stdin, stdout, stderr = ssh.exec_command(command2)
  6. # 输出命令执行结果
  7. result = stdout.read()
  8. print(result)

上面的命令是先执行:cd /www/wwwroot ,进入到wwwroot,再查看里面的文件夹,下面是xshell里面执行的结果

Python代码执行的结果

可以看到结果和之前的一样,所以这种方式是错误(辰哥一开始也是这样干的,这里就给大家提个醒)

正确的方式:

  1. # 输入linux命令
  2. command = "cd /www/wwwroot ;ls"
  3. stdin, stdout, stderr = ssh.exec_command(command)
  4. # 输出命令执行结果
  5. result = stdout.read()
  6. ## bytes 转 str
  7. result = str(result)
  8. result = result.split('\\n')
  9. for i in result:
  10. print(i)

直接在用;把多条命令隔开即可,转为str后,通过\\n去分割结果,按行输出

03 SFTPClient

1、SFTPClient常用方法介绍

2、 上传文件到Linux

这里先在本地新建一个文本文件:辰哥.txt ,并在里面输入了一些内容

连接Linux服务器

  1. # 获取Transport实例
  2. tran = paramiko.Transport(('远程Linux的ip', 22))
  3. # 连接SSH服务端,使用password
  4. tran.connect(username="用户名", password='密码')
  5. # 获取SFTP实例
  6. sftp = paramiko.SFTPClient.from_transport(tran)

上传文件

  1. # 设置上传的本地/远程文件路径
  2. localpath = "D:/公众号/0603/辰哥.txt"
  3. remotepath = "/www/wwwroot//辰哥.txt"
  4. # 执行上传动作
  5. sftp.put(localpath, remotepath)
  6. # 关闭连接
  7. tran.close()

效果如下:

3、从Linux服务器下载文件

辰哥在Linux服务器新建了一个文本文件:Python研究者.txt ,并写入内容

下载文件

  1. localpath2 = "D:/公众号/0603/Python研究者.txt"
  2. remotepath2 = "/www/wwwroot/Python研究者.txt"
  3. # 执行下载动作
  4. sftp.get(remotepath2, localpath2)
  5. # 关闭连接
  6. tran.close()

效果:

04 小结

本文讲解了Paramiko库,并讲解ssh和sftp两大组件,设计的核心知识点(亮点):

1、Python连接远程Linux服务器

2、执行命令并返回结果

3、上传文件到远程Linux服务器

4、从远程Linux下载文件

再见Xshell、Xftp!Python执行Linux命令、上传下载远程文件的更多相关文章

  1. python执行linux命令的两种方法

    python执行linux命令有两种方法: 在此以Linux常用的ls命令为例: 方法一:使用os模块 1 2 3 shell# python >> import os >> ...

  2. linux系统上传下载命令rz和sz的教程

    (一)安装方法汇总(注意:一下命令如果没有权限的需要在每个命令前面加一个sudo) 1.安装方法(推荐) sudo yum install lrzsz 2.在安装Linux系统时选中“DialupNe ...

  3. linux下常用FTP命令 上传下载文件【转】

    1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...

  4. 向linux服务器上传下载文件方式收集

    向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ...

  5. 在Windows上使用终端模拟程序连接操作Linux以及上传下载文件

    在Windows上使用终端模拟程序连接操作Linux以及上传下载文件 [很简单,就是一个工具的使用而已,放这里是做个笔记.] 刚买的云主机,或者是虚拟机里安装的Linux系统,可能会涉及到在windo ...

  6. python之实现ftp上传下载代码(含错误处理)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kait ...

  7. Linux下不借助工具实现远程linux服务器上传下载文件

    # Linux下不借助工具实现远程linux服务器上传下载文件 ## 简介 - Linux下自带ssh工具,可以实现远程Linux服务器的功能- Linux下自带scp工具,可以实现文件传输功能 ## ...

  8. Xshell5下利用sftp上传下载传输文件

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH ...

  9. SpringMVC文件上传下载(单文件、多文件)

    前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...

随机推荐

  1. 终于可以像使用 Docker 一样丝滑地使用 Containerd 了

    有追求的工程师一般都是有技术洁癖的,云原生的世界更是如此,Kubernetes虽然制定了容器运行时接口(CRI)标准,但早期能用的容器运行时只有Docker,而Docker 又不适配这个标准,于是给 ...

  2. 1090 Highest Price in Supply Chain

    A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...

  3. Thinkphp5之laypage分页插件的实现

    //一下是laypage所用到的 js <script type="text/javascript" src="__STATIC__/lib/laypage/1.2 ...

  4. C/C++ 实现VA与FOA之间的转换

    PE结构中的地址互转,这次再来系统的复习一下关于PE结构中各种地址的转换方式,最终通过编程来实现自动解析计算,最后将这个功能集成到我的迷你解析器中,本章中使用的工具是上次讲解PE结构文章中制作的CMD ...

  5. UVA10340子序列

    题意:       给你两个串,问你第二个第一个串是否是第一个串删除0个或多个字母得到的? 思路:       直接模拟就行了,在第二个串中去按顺序更新第一个串的下标,好像没说明白啊,不管了,水题,不 ...

  6. hdu3117 斐波那契前后4位

    题意:       求斐波那契的前后4位,n <= 10^8. 思路:       至于前四位,和hdu1568的求法一样:       http://blog.csdn.net/u013761 ...

  7. POJ2337 欧拉路径字典序输出

    题意:       给一些单词,问是否可以每个单词只用一次,然后连接在一起(不一定要成环,能连接在一起就行). 思路:       这个题目的入手点比较好想,其实就是问欧拉路径,先说下解题步骤,然后在 ...

  8. 基于 RTF specification v1.7 的 RTF 文件解析及 OLE 对象提取(使用 Python 开发)

    0x01 Office RTF 文件介绍 RTF 文件也称富文本格式(Rich Text Format, 一般简称为 RTF),意为多文本格式是由微软公司开发的跨平台文档格式.大多数的文字处理软件都能 ...

  9. wordpress如何隐藏后台位置?

    2017-02-08 20:43:20 言曌 阅读数 3585更多 分类专栏: WordPress 转载 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本 ...

  10. 【maven】IDEA工程右边的maven配置中Plugins有重复的命令

    问题 解决 换一个IDEA的版本,比如2020.02 参考链接 https://ask.csdn.net/questions/1060938 https://bbs.csdn.net/topics/3 ...