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 web框架学习笔记
May 03 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
python中reload(module)的用法示例详解
Sep 15 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
Oct 20 Python
Python爬虫天气预报实例详解(小白入门)
Jan 24 Python
Python实现针对给定单链表删除指定节点的方法
Apr 12 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
Apr 26 Python
django Serializer序列化使用方法详解
Oct 16 Python
Python元组知识点总结
Feb 18 Python
python flask几分钟实现web服务的例子
Jul 26 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
Python3-异步进程回调函数(callback())介绍
May 02 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
php代码书写习惯优化小结
2013/06/20 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
简单实现js浮动框
2016/12/13 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
BootStrap入门学习第一篇
2017/08/28 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
Python3 replace()函数使用方法
2018/03/19 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
农村婚礼证婚词
2014/01/10 职场文书
商场中秋节广播稿
2014/01/17 职场文书
应届毕业生个人求职信范文
2014/01/29 职场文书
趣味运动会活动方案
2014/02/12 职场文书
实习生辞职信范文
2015/03/02 职场文书
Hive导入csv文件示例
2022/06/25 数据库