当前位置:   article > 正文

Python教程:paramiko模块的使用方法_paramiko 不使用publickkey

paramiko 不使用publickkey

该模块可以模拟ssh连接服务器,也可以实现sftp的上传下载功能:

登录时有两种方式,一是用户名密码登录,二是通过RSA非对称秘钥对实现免密登录

首先介绍一下哎服务器上怎么实现免密登录:

1.生成秘钥命令:ssh-keygen(中间没有空格)

  • public_key 公钥,发送给需要连接的服务 ,生成位置一般为:/root/.ssh/id_rsa.pub,发给其他机器存放位置/.ssh/authorized_keys文件中,复制时注意换行问题
  • private_key 秘钥,留在自己的机器上,生成位置一般为:/root/.ssh/id_rsa

2.免密连接命令 ssh 用户名@IP地址

下面逐一介绍,并附上源码:

一、利用paramiko实现ssh功能

1.用户名密码登录

import paramiko
ssh_client = paramiko.SSHClient()
#允许连接不在know_hosts中的主机
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
#连接服务器
ssh_client.connect(hostname="10.10.10.10",port=22,username="root",password="root")
#执行指定命令,返回三个结果,标准输入,标准输出,标准错误,标准输出和标准错误不同时存在
stdin,stdout,stderr = ssh_client.exec_command("df")
#读取输出结果
std_out = stdout.read()
std_err = stderr.read()
if len(std_out) == 0:
    print(std_err)
else:
    print(std_out)
#关闭服务
ssh_client.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2.RSA免密登录

import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='10.10.10.10', port=22, username='root', pkey=private_key)
 
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
 
# 关闭连接
ssh.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

二、利用paramiko.Transport实现ssh功能

1.利用用户名密码登录

import paramiko
transport = paramiko.Transport(('10.10.10.10', 22))
transport.connect(username='root', password='root')
 
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df')
print(stdout.read())
 
transport.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.利用RSA免密登录

import paramiko
 
private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')  #私钥地址  公钥也在同目录下 id_rsa.pub
transport = paramiko.Transport(('10.10.10.10', 22))
transport.connect(username='root', pkey=private_key)
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df')
std_out = stdout.read()
std_err = stderr.read()
if len(std_out) == 0:
    print(std_err)
else:
    print(std_out)
transport.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

三、利用paramiko.Transport实现sftp功能

1.用户名密码登录

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:153708845
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
''' 基于用户名密码上传下载 '''
import paramiko
#模拟实现ssh中sco
transport = paramiko.Transport(('10.10.10.10', 22))
transport.connect(username='root', password='root')
sftp = paramiko.SFTPClient.from_transport(transport)
#上传location.py至服务器temp/test.py  本地文件路径 ==> 上传至服务器路径,并且需要重新命名
sftp.put("location.py","/temp/test.py")
#下载服务器test_path至本地local_path
sftp.get("/temp/test_path","local_path")
 
transport.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2.RSA免密登录

import paramiko
''' 基于公钥密钥上传下载  '''
private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
 
transport = paramiko.Transport(('10.10.10.10', 22))
transport.connect(username='root', pkey=private_key)
 
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path')
 
transport.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/603481
推荐阅读
相关标签
  

闽ICP备14008679号