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.0与2.X版本的区别实例分析
Aug 25 Python
在Django同1个页面中的多表单处理详解
Jan 25 Python
Python随机读取文件实现实例
May 25 Python
Python爬虫DOTA排行榜爬取实例(分享)
Jun 13 Python
基于Python3 逗号代码 和 字符图网格(详谈)
Jun 22 Python
python 列表删除所有指定元素的方法
Apr 19 Python
Python从使用线程到使用async/await的深入讲解
Sep 16 Python
使用Python横向合并excel文件的实例
Dec 11 Python
django form和field具体方法和属性说明
Jul 09 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
全面介绍python中很常用的单元测试框架unitest
Dec 14 Python
python中Tkinter 窗口之输入框和文本框的实现
Apr 12 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
漂亮但不安全的CTB
2006/10/09 PHP
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
Python设计模式之单例模式实例
2014/04/26 Python
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
python访问系统环境变量的方法
2015/04/29 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
如何基于python实现归一化处理
2020/01/20 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
美国休闲服装品牌:Express
2016/09/24 全球购物
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
Java中compareTo和compare的区别
2016/04/12 面试题
商务专员岗位职责
2013/11/23 职场文书
司机检讨书
2014/02/13 职场文书
技校毕业生个人学习的自我评价
2014/02/21 职场文书
退休欢送会主持词
2015/07/01 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL
pytorch中的 .view()函数的用法介绍
2022/03/17 Python