Python paramiko使用方法代码汇总


Posted in Python onNovember 20, 2020

1、用户名、密码登陆方式

import paramiko
paramiko.util.log_to_file('paramiko.log') # 记录日志文件
ssh = paramiko.SSHClient()
try:
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  ssh.connect('139.xx.xx.xx', username='work', password='***')
  cmd = 'ls' # 需要执行的Linux命名
  stdin, stdout, stderr = ssh.exec_command(cmd) #执行命令后的结构
  print(stdout.readlines())
  print(stdout.read().decode())
except Exception as e:
  print("%s:%s" % (e.__class__, e))
finally:
  # 关闭
  ssh.close()

2、免密登陆方式

import paramiko
ssh = paramiko.SSHClient()
SSH_PRIVATE_KEY ='/Users/xueerhuan/.ssh/id_rsa' #本地密钥文件路径

try:
  key = paramiko.RSAKey.from_private_key_file(SSH_PRIVATE_KEY) # 无解密密码时
  #key = paramiko.RSAKey.from_private_key_file(SSH_PRIVATE_KEY, password='******') # 有解密密码时,

  ssh.load_system_host_keys() #通过known_hosts 方式进行认证可以用这个,如果known_hosts 文件未定义还需要定义 known_hosts
  #ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 通过公共方式进行认证 (不需要在known_hosts 文件中存在)
  ssh.connect(hostname='139.XX.XX.XX', port=22, username='root', pkey=key)
  stdin, stdout, stderr = ssh.exec_command("ps")
  # 获取命令结果
  result = stdout.read()
  # 打印输出
  print(result.decode())
except Exception as e:
  print("%s:%s" % (e.__class__, e))
finally:
  # 关闭
  ssh.close()

注意:生成密码的方法

A、进入本地 ssh文件夹 cd .ssh/

B、使用ssh-keygen生产本地公钥和私钥 ssh-keygen

xueerhuan@ubuntu:~/.ssh$ ls
id_rsa id_rsa.pub

C、将生成的id_rsa.pub文件中的内容copy到目标机的.ssh/authorized_keys中就可以了,如果没有authorized_keys,自己创建。但是要注意authorized_keys的权限一般是600

或者直接在本地使用一条命令也可以实现公钥的复制,ssh-copy-id后面接入的用户就是要支持免密登录的用户。

morra@ubuntu:~/.ssh$ ssh-copy-id "morra@192.168.1.42"
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/morra/.ssh/id_rsa.pub"
The authenticity of host '192.168.1.42 (192.168.1.42)' can't be established.
ECDSA key fingerprint is SHA256:/ufx+/OLtdsYy7vsdk4KDu9xJsBp6zHonRAf2jjT0GI.
Are you sure you want to continue connecting (yes/no)? n^H
Please type 'yes' or 'no': yes
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Password:

Number of key(s) added: 1

Now try logging into the machine, with:  "ssh 'morra@192.168.1.42'"  and check to make sure that only the key(s) you wanted were added.

#去目标机器下,检查authorized_keys文件
localhost:.ssh morra$ cat authorized_keys

3、密码上传文件

import os
import paramiko
ssh = paramiko.SSHClient()
SSH_PRIVATE_KEY ='/Users/xueerhuan/.ssh/id_rsa' #本地密钥文件路径
key = paramiko.RSAKey.from_private_key_file(SSH_PRIVATE_KEY)
paramiko.util.log_to_file('paramiko.log')

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('139.XX.XX.XX', username='root', password='***')
t = ssh.get_transport()
sftp = paramiko.SFTPClient.from_transport(t)
d = sftp.put("mm.txt", "/home/work/.ssh/mm.txt")
print(d)

4、免密上传文件

import os
import paramiko
ssh = paramiko.SSHClient()
SSH_PRIVATE_KEY ='/Users/xueerhuan/.ssh/id_rsa' #本地密钥文件路径
key = paramiko.RSAKey.from_private_key_file(SSH_PRIVATE_KEY)
paramiko.util.log_to_file('paramiko.log')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='139.XX.XX.XX', port=22, username='root', pkey=key)
t = ssh.get_transport()
sftp = paramiko.SFTPClient.from_transport(t)
d = sftp.put("mm.txt", "/home/work/.ssh/mm.txt")
print(d)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
Python使用PIL模块生成随机验证码
Nov 21 Python
python的staticmethod与classmethod实现实例代码
Feb 11 Python
Python中max函数用于二维列表的实例
Apr 03 Python
Python实现基于KNN算法的笔迹识别功能详解
Jul 09 Python
python对离散变量的one-hot编码方法
Jul 11 Python
简单瞅瞅Python vars()内置函数的实现
Sep 27 Python
Django学习之文件上传与下载
Oct 06 Python
Python动态声明变量赋值代码实例
Dec 30 Python
mac在matplotlib中显示中文的操作方法
Mar 06 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
初学者学习Python好还是Java好
May 26 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 #Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 #Python
python爬取天气数据的实例详解
Nov 20 #Python
python爬取招聘要求等信息实例
Nov 20 #Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 #Python
Python getsizeof()和getsize()区分详解
Nov 20 #Python
Python析构函数__del__定义原理解析
Nov 20 #Python
You might like
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
JS中style属性
2006/10/11 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
js同源策略详解
2015/05/21 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
Python解析json代码实例解析
2019/11/25 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
党员先进事迹材料
2014/12/19 职场文书
小学远程教育工作总结
2015/08/13 职场文书
如何撰写促销方案?
2019/07/05 职场文书
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js
Redis全局ID生成器的实现
2022/06/05 Redis