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 相关文章推荐
python循环监控远程端口的方法
Mar 14 Python
Python中操作mysql的pymysql模块详解
Sep 13 Python
Python实现的文本简单可逆加密算法示例
May 18 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 Python
在python环境下运用kafka对数据进行实时传输的方法
Dec 27 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
python实现网站微信登录的示例代码
Sep 18 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
Mar 09 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
python 多线程爬取壁纸网站的示例
Feb 20 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
JAVA/JSP学习系列之六
2006/10/09 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
PHP Session机制简介及用法
2014/08/19 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
JS 建立对象的方法
2007/04/21 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
2012/09/21 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
django模板语法学习之include示例详解
2017/12/17 Python
如何在python中使用selenium的示例
2017/12/26 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
python 显示数组全部元素的方法
2018/04/19 Python
linux安装python修改默认python版本方法
2019/03/31 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
2020/11/05 Python
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
医学生自荐信
2013/12/03 职场文书
党员个人思想汇报
2013/12/28 职场文书
2014年教师节活动总结
2014/08/29 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android