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 相关文章推荐
gearman的安装启动及python API使用实例
Jul 08 Python
Python实现基于KNN算法的笔迹识别功能详解
Jul 09 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
在Django中URL正则表达式匹配的方法
Dec 20 Python
对python 自定义协议的方法详解
Feb 13 Python
Python read函数按字节(字符)读取文件的实现
Jul 03 Python
Python 脚本拉取 Docker 镜像问题
Nov 10 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
python matplotlib 绘图 和 dpi对应关系详解
Mar 14 Python
Python代码需要缩进吗
Jul 01 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
Windows 平台做 Python 开发的最佳组合(推荐)
Jul 27 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中文字母数字验证码实现代码
2008/04/25 PHP
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
10款实用的PHP开源工具
2015/10/23 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
浅谈Javascript面向对象编程
2011/11/15 Javascript
javascript对select标签的控制(option选项/select)
2013/01/31 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
详解Python中的序列化与反序列化的使用
2015/06/30 Python
在Python中使用正则表达式的方法
2015/08/13 Python
python Django里CSRF 对应策略详解
2019/08/05 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
三年大学生活自我鉴定
2014/01/21 职场文书
高三英语复习计划
2015/01/19 职场文书
自主招生英文自荐信
2015/03/25 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
七年级英语教学反思
2016/02/15 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python