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接收多播数据的代码
Mar 01 Python
Python3实现生成随机密码的方法
Aug 23 Python
使用Python标准库中的wave模块绘制乐谱的简单教程
Mar 30 Python
Linux下将Python的Django项目部署到Apache服务器
Dec 24 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
Nov 14 Python
新手常见6种的python报错及解决方法
Mar 09 Python
使用Eclipse如何开发python脚本
Apr 11 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 Python
Python获取android设备cpu和内存占用情况
Nov 15 Python
python制作图形界面的2048游戏, 基于tkinter
Apr 06 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
Oracle Faq(Oracle的版本)
2006/10/09 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
jQuery总体架构的理解分析
2011/03/07 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
2019/07/15 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
python基础教程之数字处理(math)模块详解
2014/03/25 Python
python根据文件大小打log日志
2014/10/09 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
初级会计求职信范文
2014/02/15 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
合伙经营协议书范本
2014/09/13 职场文书
房产电话营销开场白
2015/05/29 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
初中语文教学反思范文
2016/03/03 职场文书