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 相关文章推荐
MySQL最常见的操作语句小结
May 07 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
May 20 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
python如何定义带参数的装饰器
Mar 20 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
人工神经网络算法知识点总结
Jun 11 Python
python 修改本地网络配置的方法
Aug 14 Python
Python for循环搭配else常见问题解决
Feb 11 Python
python使用turtle库绘制奥运五环
Feb 24 Python
Python中os模块功能与用法详解
Feb 26 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
Mar 13 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 变量结构体
2017/10/11 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
vue mvvm数据响应实现
2020/11/11 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
python实现用户答题功能
2018/01/17 Python
Python输入二维数组方法
2018/04/13 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
Django更新models数据库结构步骤
2020/04/01 Python
虚拟机下载python是否需要联网
2020/07/27 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
保险专业求职信
2014/07/07 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
关于学习的决心书
2015/02/05 职场文书
Python 制作自动化翻译工具
2021/04/25 Python