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编程判断一个正整数是否为素数的方法
Apr 14 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
Jan 17 Python
python实现多人聊天室
Mar 31 Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 Python
python使用插值法画出平滑曲线
Dec 15 Python
python射线法判断一个点在图形区域内外
Jun 28 Python
微信公众号token验证失败解决方案
Jul 22 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
Python学习笔记之For循环用法详解
Aug 14 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
pytorch实现线性拟合方式
Jan 15 Python
python实现图像外边界跟踪操作
Jul 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
php获取文章上一页与下一页的方法
2014/12/01 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
判断访客终端类型集锦
2015/06/05 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
countup.js实现数字动态叠加效果
2019/10/17 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
[03:55]显微镜下的DOTA2特别篇——430灰烬之灵神级操作
2014/06/24 DOTA
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
Django 视图层(view)的使用
2018/11/09 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
Python count函数使用方法实例解析
2020/03/23 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
什么是python的函数体
2020/06/19 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
护士自荐信范文
2013/12/15 职场文书
婚礼证婚人证婚词
2014/01/08 职场文书
四年级下册教学反思
2014/02/01 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
环卫工人节活动总结
2014/08/29 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
gojs实现蚂蚁线动画效果
2022/02/18 Javascript