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版
Dec 07 Python
Python进阶篇之字典操作总结
Nov 16 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
Django框架教程之正则表达式URL误区详解
Jan 28 Python
Python中分支语句与循环语句实例详解
Sep 13 Python
python pygame实现2048游戏
Nov 20 Python
python快速排序的实现及运行时间比较
Nov 22 Python
Python读取分割压缩TXT文本文件实例
Feb 14 Python
python中对二维列表中一维列表的调用方法
Jun 07 Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
python正则表达式re.search()的基本使用教程
May 21 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实现时间轴函数代码
2011/10/08 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
php curl_init函数用法
2014/01/31 PHP
Yii分页用法实例详解
2014/12/04 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
round robin权重轮循算法php实现代码
2016/05/28 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
js AspxButton的客户端操作
2009/06/26 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
详解javascript函数的参数
2015/11/10 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
python对字典进行排序实例
2014/09/25 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
tensorflow多维张量计算实例
2020/02/11 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
python math模块的基本使用教程
2021/01/16 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
毕业实习计划书
2015/01/16 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python