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 22 Python
python hook监听事件详解
Oct 25 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
python实现海螺图片的方法示例
May 12 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
python3常用的数据清洗方法(小结)
Oct 31 Python
Python实现图片识别加翻译功能
Dec 26 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
Dec 31 Python
Python类中的装饰器在当前类中的声明与调用详解
Apr 15 Python
详解Pymongo常用查询方法总结
Jan 29 Python
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 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
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
使用php的HTTP请求的库Requests实现美女图片墙
2015/02/22 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP使用观察者模式处理异常信息的方法详解
2019/09/24 PHP
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
动态创建按钮的JavaScript代码
2016/01/29 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
JavaScript学习笔记--常用的互动方法
2016/12/07 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
python批量制作雷达图的实现方法
2016/07/26 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
python语言元素知识点详解
2019/05/15 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
基于django传递数据到后端的例子
2019/08/16 Python
Python实现快速排序的方法详解
2019/10/25 Python
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
Currentbody西班牙:美容仪专家
2019/09/28 全球购物
英语硕士生求职简历的自我评价
2013/10/15 职场文书
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
公司市场部岗位职责
2015/04/15 职场文书
小学生暑假安全保证书
2015/07/13 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书