Paramiko模块

charles8866 2018-02-01 原文

Paramiko模块

python 的paramiko 模块,改模块是基于ssh用于连接远程服务器并执行相关操作


 

SSHClient

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

基于用户名密码的连接:

 1 import paramiko
 2 
 3 # 创建SSH对象
 4 ssh = paramiko.SSHClient()
 5 # 允许连接不在know_hosts文件中的主机
 6 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 7 # 连接服务器
 8 ssh.connect(hostname='0.0.0.0', port=22, username='root', password='123456')
 9 
10 # 执行命令
11 stdin, stdout, stderr = ssh.exec_command('df')
12 # 获取命令结果
13 #标准输出只有在正确的情况下才会有输出,错误的情况下没有
14 res,err = stdout.read(),stderr.read()
15 result = res if res else err
16 print(result.decode())
17 # 关闭连接
18 ssh.close()

如果遇到这样的问题

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())这个函数就能够能好的解决

解释:

  在linux中直接通过ssh去登录远程,会出现如下的问题:

输入yes之后:

输入密码就可以登录。

在linux中如果有一个文件 /root/.ssh/known_hosts 

 里面就有一个10.0.0.41的相关rsa信息,如果这个文件里有这个安全的签名认证,就可以直接输入密码连接,否则就需要自己做判断是否加入known_hosts

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())就是解决了这个问题,自动添加认证

在这里,不能执行“top”命令,只能让他执行那种一次性执行完毕的命令

 

 SFtpClient

  ssh远程传文件命令:

    #r即使是目录也会传,p是会把文件的权限也传过去
scp -rp -P52113 文件名 root@10.0.0.41:/tmp/
查看文件内容,目录内容可以用:more ****

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

基于用户名密码上传下载

import paramiko

transport = paramiko.Transport(('192.168.5.9', 22))
transport.connect(username='root', password='123456')

sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('笔记', '/tmp/test_from_win')
# 将remove_path 下载到本地 local_path
sftp.get('/root/test.txt', 'fromlinux.txt')

transport.close()

 put()方法是上传文件,get()方法是下载文件

上面两种方式都是用了明文用户名密码,这个是很不安全的。所以可以用密钥去连接

ssh密钥—–RSA非对称密钥验证

公钥(public key):是给别人的

私钥(private key)

10.0.0.31 ———-》10.0.0.41   这样就可以无密码连接

私钥        公钥

在linux中:

a. linux中生成公钥私钥对:#ssh-keygen(默认保存在/root/.ssh/id_rsa)

私钥在id_rsa中,公钥在id_rsa.pub中

b.将本地的公钥添加到远程机器的authorized_keys中,从而实现SSH无密码登录。ssh-copy-id “-p22 root@192.168.5.9”  

c.利用ssh远程无密码登录:ssh root@192.168.5.9 -p22

在windows中:

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('id_rsa9.txt')

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='192.168.5.12', port=22, username='xiaoming', pkey=private_key)

# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
print(result.decode())
# 关闭连接
ssh.close()

 

使用rz/sz命令可以将linux生成的公钥上传到windows上:sz ~/.ssh/id_rsa
安装rz/sz命令:yum install lrzsz
然后将得到的id_rsa放到项目当中就可以使用了

 

发表于 2018-02-01 23:32 ﹏亦°洛轩づ 阅读() 评论() 编辑 收藏

 

版权声明:本文为charles8866原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/charles8866/p/8401788.html

Paramiko模块的更多相关文章

  1. Paramiko模块

    Paramiko paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值 […]...

  2. paramiko模块——ssh远程连接服务器并执行命令

    paramiko模块——ssh远程连接服务器并执行命令 通过ssh远程连接服务器并执行相应的命令,类似于Xsh […]...

随机推荐

  1. Eclipse中配置Tomcat

    1.下载Tomcat网址:http://tomcat.apache.org/   2.在右边Download导 […]...

  2. C#读写xml文件 – littlejoean

    C#读写xml文件 本文转载:http://www.cnblogs.com/xiaoxiangfeizi/ar […]...

  3. 爬取简书课后答案专题使用python

    首先给出简书的官网 https://www.jianshu.com/ 和我们选择的专题 课后答案这个专题 我们 […]...

  4. 分布式应用框架 Dapr

    微服务架构已成为构建云原生应用程序的标准,微服务架构提供了令人信服的好处,包括可伸缩性,松散的服务耦合和独立部 […]...

  5. Asp.Net Core 开发并部署到Ubuntu

          涉及:Asp.Net Core Webapi    Ubuntu服务器   Nginx代理   A […]...

  6. 前端常用正则表达式

    前端常用正则表达式 1、仅支持数字 /^[0-9]+$/ 2、仅支持数字和英文  (注: [ ] 中括号内可任 […]...

  7. SDN

    SDN介绍 软件定义网络(SDN)技术是一种新颖的云计算方法,可促进网络管理,并通过编程实现高效的网络配置,从 […]...

  8. dnsmasq详解&手册

        Dnsmasq为小型网络提供网络基础设施:DNS,DHCP,路由器通告和网络引导。它被设计为轻量级且占 […]...

展开目录

目录导航