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 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
详解Python字符串对象的实现
Dec 24 Python
Python 专题二 条件语句和循环语句的基础知识
Mar 19 Python
Python 中开发pattern的string模板(template) 实例详解
Apr 01 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
Jan 29 Python
Python-接口开发入门解析
Aug 01 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
Apr 10 Python
Python更换pip源方法过程解析
May 19 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 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 has encountered an Access Violation
2007/01/15 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
DWZ+ThinkPHP开发时遇到的问题分析
2016/12/12 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
JS表的模拟方法
2015/02/05 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
Python中对列表排序实例
2015/01/04 Python
python模拟鼠标拖动操作的方法
2015/03/11 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
python获得一个月有多少天的方法
2015/06/04 Python
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
python写日志文件操作类与应用示例
2019/07/01 Python
详解python调用cmd命令三种方法
2019/07/08 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
简述python Scrapy框架
2020/08/17 Python
如何通过python计算圆周率PI
2020/11/11 Python
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
私有程序集与共享程序集有什么区别
2013/04/05 面试题
个人工作主要事迹
2014/05/08 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python