python paramiko连接ssh实现命令

作者:wangfeng7399 时间:2022-03-29 02:29:22 

paramiko

paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。

安装

pip install paramiko

模块使用

执行命令—用户名+密码

#!/usr/bin/env python
#coding:utf-8
import paramiko
# 建立一个sshclient对象
ssh = paramiko.SSHClient()
# 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 调用connect方法连接服务器
ssh.connect('192.168.1.108', 22, 'alex', '123')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 结果放到stdout中,如果有错误将放到stderr中
print(stdout.read().decode('utf-8'))
# 关闭连接
ssh.close();

 paramiko\ecdsakey.py:164: CryptographyDeprecationWarning: Support for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_point
  self.ecdsa_curve.curve_class(), pointinfo

paramiko\kex_ecdh_nist.py:39: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
  m.add_string(self.Q_C.public_numbers().encode_point())

paramiko\kex_ecdh_nist.py:96: CryptographyDeprecationWarning: Support for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_point
  self.curve, Q_S_bytes

paramiko\kex_ecdh_nist.py:111: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
  hm.add_string(self.Q_C.public_numbers().encode_point())

 原因

paramiko 2.4.2 依赖 cryptography,而最新的cryptography==2.5里有一些弃用的API。

解决

删掉cryptography,安装2.4.2,就不会报错了。

pip uninstall cryptography

pip install cryptography==2.4.2

执行命令 -秘钥

import paramiko
private_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(private_key_path)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('主机名 ', 端口, '用户名', key)
stdin, stdout, stderr = ssh.exec_command('df')
print(stdout.read().decode("utf-8"))
ssh.close()

上传下载文件—用户名密码

import os,sys
import paramiko
t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='derek',password='123')
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test.py','/tmp/test.py')?
t.close()
import os,sys
import paramiko
t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='derek',password='123')
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/tmp/test.py','/tmp/test2.py')
t.close()

上传下载文件-用户名秘钥

import paramiko
pravie_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='derek',pkey=key)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test3.py','/tmp/test3.py')?
t.close()
import paramiko
pravie_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='derek',pkey=key)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/tmp/test3.py','/tmp/test4.py')?
t.close()

来源:https://blog.51cto.com/wangfeng7399/2376115

标签:python,paramiko,连接,ssh
0
投稿

猜你喜欢

  • 为google量身定做的sitemap生成代码asp版

    2011-04-06 10:43:00
  • 解决Tensorflow安装成功,但在导入时报错的问题

    2022-03-05 18:39:27
  • 客户体验

    2008-12-11 13:58:00
  • Laravel实现队列的示例代码

    2023-05-28 04:39:21
  • python pandas loc 布尔索引示例说明

    2021-02-28 22:43:19
  • 交互设计实用指南系列(6) –标签明晰、有效

    2010-01-21 12:39:00
  • CSS执行顺序与优先权的问题

    2010-08-23 16:21:00
  • CSS 的模块化思想

    2009-02-03 12:52:00
  • uniqueidentifier转换成varchar数据类型的sql语句

    2011-09-30 11:17:48
  • python 网络编程要点总结

    2023-09-30 06:15:38
  • Python asyncio异步编程简单实现示例

    2023-09-23 15:27:52
  • python+pytest接口自动化之session会话保持的实现

    2021-10-15 15:45:31
  • 轻松解决Mysql“信息包过大”的处理方法

    2008-06-07 16:50:00
  • jQuery 1.4官方中文手册[译]

    2010-01-20 10:46:00
  • python科学计算之numpy——ufunc函数用法

    2023-05-13 15:13:12
  • Python json模块与jsonpath模块区别详解

    2023-09-17 18:07:26
  • 详解python进行mp3格式判断

    2023-11-06 14:08:20
  • JavaScript逆向分析instagram登入过程

    2023-09-08 19:51:52
  • 如何使用flask将模型部署为服务

    2021-11-11 06:02:48
  • Python实现分数序列求和

    2023-10-07 12:44:54
  • asp之家 网络编程 m.aspxhome.com