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合并字符串的3种方法
May 21 Python
Python下Fabric的简单部署方法
Jul 14 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
python2 与python3的print区别小结
Jan 16 Python
利用Opencv中Houghline方法实现直线检测
Feb 11 Python
基于Django框架利用Ajax实现点赞功能实例代码
Aug 19 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 Python
python中dict()的高级用法实现
Nov 13 Python
Python流程控制常用工具详解
Feb 24 Python
pycharm全局搜索的具体步骤
Jul 28 Python
Python暴力破解Mysql数据的示例
Nov 09 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 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+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
Jquery easyui 实现动态树
2015/11/17 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
Three.js学习之正交投影照相机
2016/08/01 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
python爬取指定微信公众号文章
2018/12/20 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
python3+opencv生成不规则黑白mask实例
2020/02/19 Python
Python常用断言函数实例汇总
2020/11/30 Python
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
大二学生自我检讨书
2014/10/23 职场文书
总经理岗位职责范本
2015/04/01 职场文书
初一英语教学反思
2016/02/15 职场文书
《灰雀》教学反思
2016/02/19 职场文书
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis