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字符串处理实例详解
May 18 Python
python中map()函数的使用方法示例
Sep 29 Python
Python3之读取连接过的网络并定位的方法
Apr 22 Python
对python判断ip是否可达的实例详解
Jan 31 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
tensorflow没有output结点,存储成pb文件的例子
Jan 04 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 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 检查电子邮件函数(自写)
2014/01/16 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
PHP网络操作函数汇总
2015/05/18 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
斜45度寻路实现函数
2009/08/20 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
基于jquery的图片懒加载js
2010/06/30 Javascript
jQuery代码优化 遍历篇
2011/11/01 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
2017/06/13 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
js通过Date对象实现倒计时动画效果
2017/10/27 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
python调用staf自动化框架的方法
2018/12/26 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
大专学生推荐信范文
2013/11/19 职场文书
小组名称和口号
2014/06/09 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
详解TypeScript的基础类型
2022/02/18 Javascript
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技