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持久性管理pickle模块详细介绍
Feb 18 Python
Python作用域用法实例详解
Mar 15 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
python画折线图的程序
Jul 26 Python
Django框架登录加上验证码校验实现验证功能示例
May 23 Python
Python变量访问权限控制详解
Jun 29 Python
opencv实现简单人脸识别
Feb 19 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
Pytorch上下采样函数--interpolate用法
Jul 07 Python
PyQt5的相对布局管理的实现
Aug 07 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 Python
sklearn中的交叉验证的实现(Cross-Validation)
Feb 22 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
基于initPHP的框架介绍
2013/04/18 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
jsTree树控件(基于jQuery, 超强悍)[推荐]
2009/09/01 Javascript
JQuery中html()方法使用不当带来的陷阱
2011/04/07 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
Python中的生成器和yield详细介绍
2015/01/09 Python
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Python中的random()方法的使用介绍
2015/05/15 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
python切片的步进、添加、连接简单操作示例
2019/07/11 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
Orlebar Brown官网:设计师泳裤和泳装
2020/12/08 全球购物
区域总监的岗位职责
2013/11/21 职场文书
大一新生学期自我评价
2014/04/09 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
社区植树节活动总结
2015/02/06 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
革命电影观后感
2015/06/18 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书