Python3中的paramiko模块,基于SSH用于连接远程服务器并执行相关操作

  http://docs.paramiko.org/en/2.1/

SSHClient 用于连接远程服务器并执行基本命令

import paramiko

# 创建SSH客户端对象
ssh = paramiko.SSHClient() # 允许连接不再know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器
ssh.connect(hostname="172.16.110.218", port=22, username="root", password="******") # 执行命令
stdin, stdout, stderr = ssh.exec_command("ls /local/jet") # 获取命令执行结果
result = stderr.read()
result = result if result else stdout.read()
print(str(result.decode("gbk"))) # 关闭连接
ssh.close()

1.使用用户名密码连接


import paramiko

# 读取私钥文件
private_key = paramiko.RSAKey.from_private_key_file("e:\\id_rsa") # 创建SSH对象
ssh = paramiko.SSHClient() # 允许连接不再known_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器
ssh.connect(hostname="172.16.110.218", port=22, username="root", pkey=private_key) # 执行命令
stdin, stdout, stderr = ssh.exec_command("ls /local/jet")
# 获取命令执行结果
result = stderr.read()
result = result if result else stdout.read()
print(str(result.decode("gbk"))) # 关闭连接
ssh.close()

2.使用私钥文件连接


import paramiko
from io import StringIO key_str = """-----BEGIN RSA PRIVATE KEY-----
MIIEoQIBAAKCAQEA6eXFQDFRT+tbtnsw44+16fZa1cZF7nouFVRuIuEZx93Gu9Kr
jBW2MFO/uyREHFK20xQzfX/jcD6/R1Yxh7jtLtN/uIUC3mV6yV/WjTmidH1ABlvq
wWyF2i6Q0ZS3bmznuvi/Z1BVJQan9DaH17aQSA/xsKM08OPEO8PK7tuaXlzokj/7
Tb14vOUnxN8C79iBcifoIlq6zpu2SlJpu/YUc3jX6nqJEtG/XwYHfTvwXGwlLCtD
VOb8NtwjggmRbELNZ6QCY8rNo+xUP+9tnp6xa6io8gDg7yswaAvQBxe3F6NZCtc/
sOceTKUIosYZi45tDqfL9YashOvbUNjkSLXQZQIBIwKCAQANXZY+LrQwc9la4nfS
fT2YVzhj/LOJ+FpnnmyxiTSsVdDXiGGS+e0nVT4n83GbN+0wohGSJJCnVAruIi63
TGVTIgdMX18/6Iqsa+Bf12hebY6hRxS6mHytYb8h6z2uieFbJCgxyhN+dWiu3otr
aYSWZ0+jsY3/IvVFPmNeGy1kejp2qDYWxznzQwCCXpuVNJwXgYjTzdSDGm/GQeao
sSuQlz6eRwI06KTuKw1s9tuMpcyhcvqWA7cApR5vNoGQVdUiYKdBuljr7hoo3oPX
NdIuml09IpwyEnc1DDmpR1ynlFadScAyNLa6GQYI8y6tz5mudRiHxskDHG2Y0pl2
XlqTAoGBAPiaKEi/cApypdcensuaBmhKlnGyzsg2qPY2v0Uy7L8mSfDxumkRfJN1
PRao0bAsIwH0sTz4ImXU9ObXnV2Etrg+oCPTJ0hCjnc2Irfl4v+yvicbxrklbkxC
kWlcfW2TQ/h38mLZ93veu0j67eXYhgZQ7dPMFXcupPFutfAI8cFPAoGBAPDbl///
rvgpKse8yJSiuW2MNpv0+euhpBwGEeAA7Nrq2B8m5XljbeWh14Xhij4S86YuHeUb
g5PWnagQMliJrgNPaG+SZnFAlxM+lrKCjdOJXSIoXHpdeb4FJHWYOXQPu3TSWjlo
VSS1M9YLOILRV2VQuMrhWnef1WvvvXaoUN4LAoGBAL/HYOepn5MH/EbdG2ndOCSR
T3xIG9xHbGYqO8eq8SW+c438TflIAQQJ++zoocJrMPLhVYbOC+gn8B/K5xxBzsil
VvcQmqV1LBLR/YaMxQ5lUNxXQYeDRnVX7IR6jKT8k4UpVJVmUTOr0k496rift9j8
mjWsEI8j+5WtLUQkKDYJAoGAPe9S+K92Io4+M1xuF5eOxGXiKBpsJqXoXvo/HFgC
ZC3Ci6rqjO2ui4FjTk/wWRrQ8De+i17YsPysMofSbonNqRRrT+PRMxCb4GCNJpaZ
f4m43OXOox9Z0cbO3Gj41LOWmmH58YE6dydH1/RBuz0lGg1xWL2a64+ABc/u4/9l
QGkCgYAt3cW6UxKVdWejiZ/PRzsffdKuPjm9tTZu9hVBW8CzJD1byaeT8czjKtzv
kKwhV8yqG0ZGqmGbxc00zJLh4pk1J45Nh0dLzAD0T6SskmmJQrJ+k1KPFzqDHj1H
9KRVifIb6WKYBdWF6JXo2nBhlsSymBGPXSnY4YXbsNfWGQDm6g==
-----END RSA PRIVATE KEY-----
"""
private_key = paramiko.RSAKey(file_obj=StringIO(key_str)) # 连接服务器
transport = paramiko.Transport(('172.16.110.218', 22))
transport.connect(username='root', pkey=private_key)
ssh = paramiko.SSHClient()
ssh._transport = transport # 执行命令
stdin, stdout, stderr = ssh.exec_command('df') # 获取命令执行结果
result = stderr.read()
result = result if result else stdout.read()
print(str(result.decode("gbk"))) # 关闭连接
transport.close()

3.使用私钥字符串连接

SFTPClient 用于连接远程服务器并执行上传下载

import paramiko

# 连接远程服务器
transport = paramiko.Transport(("172.16.110.218", 22))
transport.connect(username="root", password="*****") # 生成SFTPClient对象
sftp = paramiko.SFTPClient.from_transport(transport) # 上传文件get('local_path', 'remote_path')
sftp.put("/local/script/demo.py", "e:\\demo.py")
# 下载文件get('remote_path','local_path')
sftp.get("e:\\demo.py", "/local/script/demo.py") # 关闭连接
transport.close()

1.实现与远程服务器的文件上传与下载

参考资料

  http://www.cnblogs.com/wupeiqi/articles/5095821.html

  http://www.cnblogs.com/qq1207501666/p/6780469.html

Python3-paramiko模块-基于SSH的远程连接模块的更多相关文章

  1. Python远程连接模块-Telnet

    Python远程连接模块-Telnet 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 虽然现在主流的python版本还是2.7,相信2020年python程序员都会偏向Python ...

  2. Linux 使用 ssh 命令远程连接另一台 Linux

    用 Linux 系统的 ssh 命令远程连接另一台 Linux 机器的命令 #ssh 用户名@主机名(IP地址) 例: #ssh root@10.41.24.138                  ...

  3. paramiko模块(基于SSH用于连接远程服务器)

    paramiko模块,基于SSH用于连接远程服务器并执行相关操作 class SSHConnection(object): def __init__(self, host_dict): self.ho ...

  4. 【Ansible】 基于SSH的远程管理工具

    [Ansible] 参考文档:[http://www.ansible.com.cn/docs/intro.html] 和ansible类似的工具还有saltstack,puppet,sshpass等, ...

  5. Linux 安装 python3.6 ,并且配置 Pycharm 远程连接开发

    Linux下安装Python3.6和第三方库   如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!! ...

  6. sshfs基于ssh挂载远程目录

    为了像本地一样访问远程主机上的目录,通常我们会在远程主机上使用nfs来导出目录,并在本地主机上mount这个nfs文件系统.如果是windows系统,则使用cifs或samba的方式来访问. 但可能我 ...

  7. 【控制连接实现信息共享---linux和设备下ssh和远程连接telnet服务的简单搭建】

    SSH的配置 空密码登陆ssh server 如果要登录ssh server通常要在server和client之间采取具有共同加密的秘钥,若每次当client想要了:连接ssh server时都要手工 ...

  8. 怎样使用 ssh 命令远程连接服务器?

    以 Git Bash 和 阿里云 ECS云服务器 为例, 想要进行远程连接, 可以使用 ssh 用户名@服务器IP 进行连接. 如下: 注意: 1. 密码输入时是没有提示的 2. root 是超级管理 ...

  9. ssh隧道远程连接mysql

    有时候比如一些云主机,没有开放3306端口,这里可以用ssh隧道来连接数据库,更加安全 注意点: 1.本地ssh可以登录远程服务器,(密码或者秘钥) 2.远程数据库需要赋权限给隧道端的ip 命令: s ...

随机推荐

  1. 使用Redis分布式锁实现主备

    使用Redis分布式锁实现集群的主备 最近工作中遇到一个问题,我们会调用业务部门提供的HTTP接口获取所有的音视频任务信息,这些任务会被分发到各个机器节点进行处理.有两个方案: 方案一 为每台机器编号 ...

  2. CSS 超出行显示...

    一行超出 overflow:hidden; white-space:nowrap; text-overflow:ellipsis; 多行超出 overflow: hidden; text-overfl ...

  3. k-means聚类分析 python 代码实现(不使用现成聚类库)

    一.实验目标 1.使用 K-means 模型进行聚类,尝试使用不同的类别个数 K,并分析聚类结果. ​ 2.按照 8:2 的比例随机将数据划分为训练集和测试集,至少尝试 3 个不同的 K 值,并画出不 ...

  4. js规则和运算符

    通过“+”号或toString()方法将数值转换成字符串. 通过parseInt()将字符串转换成整型. 通过parseFloat()将字符串转换成浮点型. charAt() 获取字符串特定索引处的字 ...

  5. Java实现 LeetCode 208 实现 Trie (前缀树)

    208. 实现 Trie (前缀树) 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie() ...

  6. java实现第七届蓝桥杯取球博弈

    题目9.取球博弈 取球博弈 两个人玩取球的游戏. 一共有N个球,每人轮流取球,每次可取集合{n1,n2,n3}中的任何一个数目. 如果无法继续取球,则游戏结束. 此时,持有奇数个球的一方获胜. 如果两 ...

  7. OO第一作业周期(前四周)总结

    前言:回顾这三次的作业,在一次次的练习下渐渐理解了一些Java的一些基本知识和类与对象的含义与用法,也找到了很多自身的不足和问题,主要是反映类与类之间的关系没有理解到位,这次总结后又有了新的感悟和理解 ...

  8. 一文讲透Java序列化

    本文目录 一.序列化是什么 二.为什么需要序列化 三.序列化怎么用 四.序列化深度探秘 4.1 为什么必须实现Serializable接口 4.2 被序列化对象的字段是引用时该怎么办 4.3 同一个对 ...

  9. hadoop知识整理(1)之HDFS

    一.HDFS是一个分布式文件系统 体系架构: hdfs主要包含了3部分,namenode.datanode和secondaryNameNode namenode主要作用和运行方式: 1)管理hdfs的 ...

  10. (二)用testng的groups管理用例

    原文链接:https://www.cnblogs.com/Jourly/p/7002096.html 一.需求: 测试时经常有两种场景,第一种是冒烟测试的小部分用例:一类是全部用例. 二.针对第一种运 ...