栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python SSH 库--paramiko

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python SSH 库--paramiko

文章目录
  • 一. 服务器 SSH 登录
  • 二. 脚本操作
    •   1.登录服务器
    •   2.上传文件
    •   3.切换用户
    •   4.执行 shell 脚本
    •   5.获取脚本输出,执行完成自动退出
  • 三. python 脚本


一. 服务器 SSH 登录

日常工作中 SSH 登录服务器查看问题排查问题已经是常规操作,但是最近由于需要在服务器上做一些繁琐的操作重复测试一些东西,干脆就想写一个脚本去一键操作,最开始想到的是 shell 脚本,无奈 shell 这语言太让人头大,写过一次不想写二次的那种,而且需要在目标服务器上执行。在百度了之后发现 python 有 SSH 登录服务器的库,拿来一用测试发现还是很给力,记录下来当时刚接触时候的一些疑问和操作。

二. 脚本操作   1.登录服务器   2.上传文件   3.切换用户   4.执行 shell 脚本   5.获取脚本输出,执行完成自动退出 三. python 脚本

脚本执行命令:python3 update_metadata.py 127.0.0.1 /root/test.text

import csv
import sys
# pip3 install paramiko 安装
import paramiko

host = sys.argv[1]
password = 'password'
local_path = sys.argv[2]
file_name = local_path[local_path.rfind('/') + 1:]
server_path = "/home/" + file_name
hdfs_base_path = "/home/"
hdfs_path = hdfs_base_path + file_name

# shell操作
ssh = paramiko.SSHClient()  # 创建SSH对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 允许连接不在know_hosts文件中的主机
ssh.connect(hostname=host, port=22, username='root', password=password)
# exec 执行是以 root 用户执行,由于服务器的限制我这里无法直接登录到我需要的用户
ssh.exec_command(server_path)
# 使用 sftp 上传本地文件到服务器
sftp = ssh.open_sftp()
sftp.put(local_path, server_path)

channel = ssh.invoke_shell()
# 切换到需要执行下列命令的用户
channel.send(bytes("su - other_usern"))
# 执行服务器上的 shell 脚本
channel.send(bytes("sh test.sh %sn" % hdfs_path))
# 命令超时时间,不然不知道什么时候 shell 脚本执行结束
channel.settimeout(4)

# 上面的超时时间是每一次调用 recv 如果超过设置的时间没有接收到消息就会中断
output_result = channel.recv(1500)
try:
    while str(output_result):
        # 打印服务器上执行上述命令的输出,判断执行结果
        print(output_result.decode("utf-8"))
        output_result = channel.recv(1500)
except Exception as e:
    pass

ssh.close()  # 关闭连接
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357309.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号