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实现去除下载电影和电视剧文件名中的多余字符的方法
Sep 23 Python
python处理csv数据的方法
Mar 11 Python
Django中实现点击图片链接强制直接下载的方法
May 14 Python
python requests 使用快速入门
Aug 31 Python
python3连接MySQL数据库实例详解
May 24 Python
python中的二维列表实例详解
Jun 19 Python
Python基础之函数的定义与使用示例
Mar 23 Python
使用python 将图片复制到系统剪贴中
Dec 13 Python
python实现串口通信的示例代码
Feb 10 Python
使用jupyter notebook直接打开.md格式的文件
Apr 10 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
python基于opencv实现人脸识别
Jan 04 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中的CMS的涵义
2007/03/11 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
JS 表单验证大全
2011/11/23 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
python 判断自定义对象类型
2009/03/21 Python
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
Python数组定义方法
2016/04/13 Python
Python中property函数用法实例分析
2018/06/04 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
C#软件工程师英语面试题
2015/06/07 面试题
建筑设计所实习生自我鉴定
2013/09/25 职场文书
经典的班主任推荐信
2013/10/28 职场文书
有关打架的检讨书
2014/01/25 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js