iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python paramiko 问题总结
  • 457
分享到

python paramiko 问题总结

pythonparamiko 2023-01-31 07:01:11 457人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

 Working with paramiko sshClient is the main class provided by the paramkio module. It provides the basic interface you

 Working with paramiko

sshClient is the main class provided by the paramkio module. It provides the basic interface you are Going to want to use to instantiate server connections. The above code creates a new SSHClient object, and then calls ”connect()” to connect us to the local SSH server.

Here’s a simple example:

1

import paramiko

2

ssh = paramiko.SSHClient()

3               ssh.connect('192.168.1.2', username='vinod', passWord='screct')

 

 

 

 

 

这样将会报如下错误:

>>> ssh.connect('127.0.0.1',username='root',password='000000')

Traceback (most recent call last):

  File "<stdin>", line 1, in ?

  File "/usr/lib/python2.4/site-packages/paramiko/client.py", line 311, in connect

    self._policy.missing_host_key(self, server_hosTKEy_name, server_key)

  File "/usr/lib/Python2.4/site-packages/paramiko/client.py", line 85, in missing_host_key

    raise SSHException('Unknown server %s' % hostname)

paramiko.SSHException: Unknown server 127.0.0.1

 

解决方法:

 

Known_host="/root/.ssh/known_hosts"<=前提,这里应该存在与127.0.0.1有关的信息。

ssh.load_system_host_keys( known_host)

 

 

 

 

 

Another way is to use an SSH key:

1

import paramiko

2

import os

3

privatekeyfile = os.path.expanduser('~/.ssh/id_rsa')

4

mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)

5

ssh.connect('192.168.1.2', username = 'vinod', pkey = mykey)

注意:(这里的key,用的是RSA的key,我们在用ssh-keygen -t rsa来指定它,才可以在这里用,否则将会报无法识别的RSA KEY。而且如果你的RSA Key有密码的话,你还需要

mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile,password='12345678')

不过,我们可以用publickey来登录的。

解法如下:

serverHost = "127.0.0.1"

serverPort = 22

userName = "root"

keyFile = "~/.ssh/badboy"

known_host = "~/.ssh/known_hosts"

channel = paramiko.SSHClient();

channel.load_system_host_keys( known_host )

channel.connect( serverHost, serverPort,username = userName, key_filename = keyFile )



Running Simple Commands

Lets run some simple commands on a remote Machine.

1

import paramiko

2

ssh = paramiko.SSHClient()

3

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) <=这样的话,就会报paramiko.SSHException: Unknown server

4

ssh.connect('beastie', username='vinod', password='secret')

5

stdin, stdout, stderr = ssh.exec_command('df -h')

6

print stdout.readlines()

7

ssh.close()

“paramiko.AutoAddPolicy()” which will auto-accept unknown keys.

 

Using sudo in running commands:

01

import paramiko

02

03

cmd    = "sudo /etc/rc.d/apache2 restart"

04

05

ssh    = paramiko.SSHClient()

06

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

07

ssh.connect('beastie', username='vinod', password='secret')

08

stdin, stdout, stderr = ssh.exec_command(cmd)

09

stdin.write('secret\n')

10

stdin.flush()

11

print stdout.readlines()

12

ssh.close()

 

在这个例子中,无法运行,也无法解释,希望志同道合的朋友能给个解释!

 

Secure File Transfer Using SFTPClient

SFTPClient is used to open an sftp session across an open ssh Transport and do remote file operations.

An SSH Transport attaches to a stream (usually a Socket), negotiates an encrypted session, authenticates, and then creates stream tunnels, called Channels, across the session. Multiple channels can be multiplexed across a single session (and often are, in the case of port forwardings).

 

以下是用密码认证功能登录的

#!/usr/bin/env python

import paramiko

 

socks=('127.0.0.1',22)

testssh=paramiko.Transport(socks)

testssh.connect(username='root',password='000000')

sftptest=paramiko.SFTPClient.from_transport(testssh)

remotepath="/tmp/a.log"

localpath="/tmp/c.log"

sftptest.put(remotepath,localpath)

sftptest.close()

testssh.close()

 

以下是用DSA认证登录的(PubkeyAuthentication)
#!/usr/bin/env python

import paramiko

 

serverHost = "192.168.1.172"

serverPort = 22

userName = "root"

keyFile = "/root/.ssh/zhuzhengjun"

known_host = "/root/.ssh/known_hosts"

channel = paramiko.SSHClient();

#host_keys = channel.load_system_host_keys(known_host)

channel.set_missing_host_key_policy(paramiko.AutoAddPolicy())

channel.connect(serverHost, serverPort,username=userName, key_filename=keyFile )

testssh=paramiko.Transport((serverHost,serverPort))

mykey = paramiko.DSSKey.from_private_key_file(keyFile,password='xyxyxy')

testssh.connect(username=userName,pkey=mykey)

sftptest=paramiko.SFTPClient.from_transport(testssh)

filepath='/tmp/e.log'

localpath='/tmp/a.log'

sftptest.put(localpath,filepath)

sftptest.close()

testssh.close()

 

以下是用RSA Key认证登录的

#!/usr/bin/evn python

 

import os

import paramiko

 

host='127.0.0.1'

port=22

testssh=paramiko.Transport((host,port))

privatekeyfile = os.path.expanduser('~/.ssh/badboy')

mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile,password='000000')

username = 'root'

testssh.connect(username=username, pkey=mykey)

sftptest=paramiko.SFTPClient.from_transport(testssh)

filepath='/tmp/e.log'

localpath='/tmp/a.log'

sftptest.put(localpath,filepath)

sftptest.close()

testssh.close()

 

另一种方法:

 

在paramiko中使用用户名和密码通过sftp传输文件,不使用key文件。

import getpass

import select

import socket

import traceback

import paramiko

def putfile():

    #import interactive

    # setup logging

    paramiko.util.log_to_file('demo.log')

    username = username

    hostname = hostname

    port = 22

    # now connect

    try:

        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        sock.connect((hostname, port))

    except Exception, e:

        print '*** Connect failed: ' + str(e)

        traceback.print_exc()

        sys.exit(1)

    t = paramiko.Transport(sock)

    try:

        t.start_client()

    except paramiko.SSHException:

        print '*** SSH negotiation failed.'

        sys.exit(1)

    keys = {}

    # check server's host key -- this is important.

    key = t.get_remote_server_key()

    # get username

    t.auth_password(username, password)

    sftp = paramiko.SFTPClient.from_transport(t)

    # dirlist on remote host

    d=datetime.date.today()-datetime.timedelta(1)

    sftp.put(localFile,serverFile)

         sftp.close()

    t.close()

 

使用DSA认证登录的(PubkeyAuthentication)

 

#!/usr/bin/env python

 

import socket

import paramiko

import os

 

username='root'

hostname='192.168.1.169'

port = 22

 

sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((hostname, port))

 

t=paramiko.Transport(sock)

t.start_client()

key=t.get_remote_server_key()

#t.auth_password(username,'000000')

privatekeyfile = os.path.expanduser('/root/.ssh/zhuzhengjun')

mykey=paramiko.DSSKey.from_private_key_file(privatekeyfile,password='061128')

t.auth_publickey(username,mykey)

sftp=paramiko.SFTPClient.from_transport(t)

sftp.put("/tmp/a.log","/tmp/h.log")

sftp.close()

t.close()

 

使用RSA Key验证

#!/usr/bin/env python

 

import socket

import paramiko

import os

 

username='root'

hostname='127.0.0.1'

port = 22

 

sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((hostname, port))

 

t=paramiko.Transport(sock)

t.start_client()

key=t.get_remote_server_key()

#t.auth_password(username,'000000')

privatekeyfile = os.path.expanduser('~/.ssh/badboy')

mykey=paramiko.RSAKey.from_private_key_file(privatekeyfile,password='000000')

t.auth_publickey(username,mykey)

sftp=paramiko.SFTPClient.from_transport(t)

sftp.put("/tmp/a.log","/tmp/h.log")

sftp.close()

t.close()

--结束END--

本文标题: python paramiko 问题总结

本文链接: https://www.lsjlt.com/news/190728.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python paramiko 问题总结
     Working with paramiko SSHClient is the main class provided by the paramkio module. It provides the basic interface you ...
    99+
    2023-01-31
    python paramiko
  • Python基础技术问题总结
    Introduction此篇文章总结python一些常见的技术问题,每一个都是简短的解释,篇幅不大,不断更新中…解释一下python的 and-or 语法python的and-or常常被用来实现类C语言中的三元运算符:, 更骚包的写法是 x...
    99+
    2023-01-31
    基础 技术 Python
  • Python基础常见问题总结(一)
    1.__ foo 、foo_ 和 __foo__ 三者之间的区别是什么?__foo表示私有属性、_foo表示受保护的属性、__foo__表示Python自带的属性 2.请您简述Python编译的工作原理,PyCodeObject 和 Py...
    99+
    2023-01-31
    常见问题 基础 Python
  • pytest使用问题总结
    问题一、AttributeError: module 'pytest' has no attribute 'allure'解决方法:pip3 uninstall pytest-allure-adaptorpip3 install allur...
    99+
    2023-01-31
    pytest
  • 详细总结Python常见的安全问题
    目录一、输入注入二、assert 语句(Assert statements)三、计时攻击(Timing attacks)四、临时文件(Temporary files)五、使用 yam...
    99+
    2024-04-02
  • python列表嵌套引发的问题总结
    目录1.嵌套列表2.识别坑点3.区分两个概念4.小例子5.正确代码总结1.嵌套列表 Python中有一种内置的数据类型叫列表(list),它是一种容器,可以用来承载其他的对象(准确的...
    99+
    2024-04-02
  • lepus监控mongo问题总结
    lepus 监控mongodb  问题 python:2.6.6 操作系统:centos 6.7 用lepus监控mongo 3.2.11,出现了以下两个问题: 一、版本问题 python t...
    99+
    2024-04-02
  • 关于Python包导入报错的问题总结
    目录错误记录总结首先,一般来说,写一个小demo可能一个文件就够了,但是要是做一个小项目,可能需要拆分成很多零散的文件,放在不同的文件夹里面调用,这个就称之为模块(包),Python...
    99+
    2023-02-17
    Python包导入 Python包导入报错 Py包导入报错
  • 经验总结以及细节问题汇总
    按位与计算是否为基数 $var & 1;//$var 为整数奇数 该结果为true,即‘&’符号可以用来判断是否为奇数 有意忽略php关闭标签 //super extra character after the closing tag ...
    99+
    2023-09-11
    php 开发语言 经验分享
  • 一些前端问题的总结
    本篇内容主要讲解“一些前端问题的总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“一些前端问题的总结”吧!代码逻辑错误「 人很容易发现别人的错误,而对自己的错误...
    99+
    2024-04-02
  • qt5.12环境配置问题总结
    qt在配置安卓环境的时候报错了!我最开始还可以使用,然后手贱我点了一个什么东西,编译器就报如下错误: 找不到安卓路径,让配置ANDROID_NDK_ROOT环境变量。 Project ERROR: You need to set the A...
    99+
    2023-09-05
    android ide qt5
  • Python使用asyncio异步时的常见问题总结
    目录1. 如何停止任务?2. 如何等待任务完成?3. 如何从任务中获取返回值?4. 如何在后台运行任务?5. 如何等待所有后台任务?1. 如何停止任务? 我们可以通过 asyncio...
    99+
    2023-05-16
    Python asyncio异步常见问题 Python asyncio异步 Python asyncio
  • Python异常处理与反射相关问题总结
    一、异常处理 在程序开发中如果遇到一些 不可预知的错误 或 你懒得做一些判断 时,可以选择用异常处理来做。 import requests while True: u...
    99+
    2024-04-02
  • Python面经之16个高频面试问题总结
    目录(一)Python 是如何进行内存管理的?(二)什么是 lambda 函数?它有什么好处(三)Python 里面如何实现 tuple 和 list 的转换?(四)请写出一段 Py...
    99+
    2024-04-02
  • python爬虫抓取时常见的小问题总结
    目录01 无法正常显示中文?解决方法02 加密问题 03 获取不到网页的全部代码?04 点击下一页时网页网页不变 05 文本节点问题 ...
    99+
    2024-04-02
  • 【Python】python对齐问题的总
    Python的对齐方式很重要,对齐方式决定了函数或者判断条件的作用域。 def print_circle(matrix,up_hang,up_lie,down_hang,down_lie): result=[] ...
    99+
    2023-01-31
    Python python
  • 总结分析无法访问PHP的问题
    在搭建服务器时,你可能会发现无法访问PHP的问题。这是一个非常常见的问题,在解决它之前,我们需要先了解一些概念。PHP是一种被广泛应用的脚本语言,它可以让你在服务器端编写程序来动态生成网页内容。为了让访问者能够看到你编写的PHP代码,你需要...
    99+
    2023-05-14
  • Python中paramiko模块的基础操作与排错问题
    目录关于应用安装示例1.秘钥登陆2.单个命令执行3.执行多个命令4.SFTPClient下载文件5.上传文件6.ssh工具封装补充学习参考关于 python的ssh库操作需要引入一个...
    99+
    2024-04-02
  • js与css的阻塞问题总结
    这篇文章主要讲解了“js与css的阻塞问题总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js与css的阻塞问题总结”吧!目录DOMContentLoaded和loadjs 阻塞了什么cs...
    99+
    2023-06-20
  • python编码问题汇总
    目录一、了解字符编码的知识储备1. 文本编辑器存取文件的原理(nodepad++,pycharm,word)2. python解释器执行py文件的原理 二、字符编码简介三、...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作