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 相关文章推荐
netbeans7安装python插件的方法图解
Dec 24 Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
基于Python pip用国内镜像下载的方法
Jun 12 Python
Python解决线性代数问题之矩阵的初等变换方法
Dec 12 Python
python算法与数据结构之冒泡排序实例详解
Jun 22 Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
Python 实现简单的客户端认证
Jul 29 Python
python 基于opencv操作摄像头
Dec 24 Python
python自动化之如何利用allure生成测试报告
May 02 Python
Python数据可视化之绘制柱状图和条形图
May 25 Python
python可视化大屏库big_screen示例详解
Nov 23 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
paypal即时到账php实现代码
2010/11/28 PHP
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
javascript self对象使用详解
2016/10/18 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
Python批量修改文件后缀的方法
2014/01/26 Python
Python中字符编码简介、方法及使用建议
2015/01/08 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
详解python的数字类型变量与其方法
2016/11/20 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
在自动化中用python实现键盘操作的方法详解
2019/07/19 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
药店主任岗位责任制
2014/02/10 职场文书
父亲节感言
2015/08/03 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python