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线程中对join方法的运用的教程
Apr 09 Python
在Django框架中设置语言偏好的教程
Jul 27 Python
Python语言描述随机梯度下降法
Jan 04 Python
python 实现在txt指定行追加文本的方法
Apr 29 Python
python Web开发你要理解的WSGI & uwsgi详解
Aug 01 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
django框架model orM使用字典作为参数,保存数据的方法分析
Jun 24 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
pytorch模型存储的2种实现方法
Feb 14 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
详解pandas赋值失败问题解决
Nov 29 Python
利用Matlab绘制各类特殊图形的实例代码
Jul 16 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函数的方法
2013/11/13 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
介绍下Lucene建立索引的过程
2016/03/02 面试题
初中数学教学反思
2014/01/16 职场文书
党员创先争优活动总结
2014/05/04 职场文书
报效祖国演讲稿
2014/09/15 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
如何写观后感
2015/06/19 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL