Python远程linux执行命令实现


Posted in Python onNovember 11, 2020

1、远程登录到linux上,使用到的模块paramiko

#远程登陆操作系统
def ssh(sys_ip,username,password,cmds):
  try
    #创建ssh客户端
    client = paramiko.SSHClient()
    #第一次ssh远程时会提示输入yes或者no
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #密码方式远程连接
    client.connect(sys_ip, 22, username=username, password=password, timeout=20)
    #互信方式远程连接
    #key_file = paramiko.RSAKey.from_private_key_file("/root/.ssh/id_rsa")
    #ssh.connect(sys_ip, 22, username=username, pkey=key_file, timeout=20)
    #执行命令
    stdin, stdout, stderr = ssh.exec_command(cmds[key])
    #获取命令执行结果,返回的数据是一个list
    result = stdout.readlines()
    return result
  except Exception, e:
    print e
  finally:
    client.close()
 
if __name__=="__main__":
  sys_ip = "192.168.0.102"
  username = "root"
  password = "1"
  cmds = "pwd"
  print ssh(sys_ip,username,password,cmds)

此处有个主意点,我遇到了,在密码登陆的时候,同样的python连接代码,放在python脚本里面执行就是报下面的错,但是将代码拷贝到python的交互模式下执行就是成功的,这个时候就是需要看下要远程的用户ssh配置是不是只支持键盘交互、密钥验证,如果是这样的话,使用密码远程登录就会报下面的错误

File "/usr/local/lib/python2.7/site-packages/paramiko/client.py", line 337, in connect
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
  File "/usr/local/lib/python2.7/site-packages/paramiko/client.py", line 528, in _auth
    raise saved_exception
AuthenticationException: Authentication failed.
 
  File "/usr/local/lib/python2.7/site-packages/paramiko/client.py", line 337, in connect
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
  File "/usr/local/lib/python2.7/site-packages/paramiko/client.py", line 528, in _auth
    raise saved_exception
paramiko.SSHException: No existing session

这个是因为linux会检测远程连接有没有tty(键盘交互),脚本方式运行的时候就没有键盘交互,看网上有在connect加,allow_agent=False,look_for_keys=False这2个参数解决的,但是我的没有解决,ssh.connect('localhost',username=name,password=pw,allow_agent=False,look_for_keys=False)

2、使用ssh,需要使用到shell命令expect

首先创建一个shell脚本remotExect.sh

#!/usr/bin/expect
set timeout 2
set local_file [lindex $argv 0]
set username  [lindex $argv 1]
set password  [lindex $argv 2]
set hostname  [lindex $argv 3]
set remote_file [lindex $argv 4]
 
spawn scp $local_file $username@$hostname:$remote_file
expect {
"yes/no"#是为了捕获首次登录,要手动输入yes/no的情况
{send "yes\r";}
"password:"#为例捕获需要输入密码的行为
{send "$password\r";}
}
expect eof

然后在python中执行

import os
cpFileCmd = "./remotecp.sh 1.txt root 1 192.168.0.102 /opt/1.txt"
os.system(cpFileCmd)

到此这篇关于Python远程linux执行命令实现的文章就介绍到这了,更多相关Python远程linux执行命令内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python3.5仿微软计算器程序
Mar 30 Python
Python 编码Basic Auth使用方法简单实例
May 25 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
python实现归并排序算法
Nov 22 Python
pycharm 安装JPype的教程
Aug 08 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
解决django FileFIELD的编码问题
Mar 30 Python
使用Keras中的ImageDataGenerator进行批次读图方式
Jun 17 Python
django 模型字段设置默认值代码
Jul 15 Python
通过实例了解Python异常处理机制底层实现
Jul 23 Python
python 实现学生信息管理系统的示例
Nov 28 Python
python+opencv实现视频抽帧示例代码
Jun 11 Python
python 实现简单的计算器(gui界面)
Nov 11 #Python
python海龟绘图之画国旗实例代码
Nov 11 #Python
python 实现倒计时功能(gui界面)
Nov 11 #Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 #Python
Django基于Models定制Admin后台实现过程解析
Nov 11 #Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 #Python
Django启动时找不到mysqlclient问题解决方案
Nov 11 #Python
You might like
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
PHP句法规则详解 入门学习
2011/11/09 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
QUnit jQuery的TDD框架
2010/11/04 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
js变量提升深入理解
2016/09/16 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
原生js实现放大镜
2017/02/20 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
详解JavaScript中的Object.is()与"==="运算符总结
2020/06/17 Javascript
详解Django框架中的视图级缓存
2015/07/23 Python
Python 对象中的数据类型
2017/05/13 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
中软国际Java程序员机试题
2012/08/19 面试题
应届毕业生应聘自荐信
2013/12/07 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
教师个人年终总结
2015/02/11 职场文书
导游词范文
2015/02/13 职场文书
教师研修随笔感言
2015/11/18 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang
Redis集群的关闭与重启操作
2021/07/07 Redis