python SSH 库--paramiko


一. 服务器 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_user\n"))
# 执行服务器上的 shell 脚本
channel.send(bytes("sh test.sh %s\n" % 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()  # 关闭连接
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ParamikoPython中用于SSH协议的一个,可以用于远程登录、传输文件等操作。下面是Paramiko的详解: 1. 安装 使用pip进行安装: ```python pip install paramiko ``` 2. 连接远程服务器 ```python import paramiko # 创建SSH客户端 ssh = paramiko.SSHClient() # 自动添加主机密钥 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接远程服务器 ssh.connect('hostname', port=22, username='username', password='password') # 执行命令 stdin, stdout, stderr = ssh.exec_command('ls') # 输出命令执行结果 print(stdout.read().decode()) # 关闭连接 ssh.close() ``` 3. 传输文件 ```python import paramiko # 创建SSH客户端 ssh = paramiko.SSHClient() # 自动添加主机密钥 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接远程服务器 ssh.connect('hostname', port=22, username='username', password='password') # 创建SFTP客户端 sftp = ssh.open_sftp() # 上传文件 sftp.put('local_path', 'remote_path') # 下载文件 sftp.get('remote_path', 'local_path') # 关闭连接 sftp.close() ssh.close() ``` 4. 高级用法 - 使用密钥登录 ```python import paramiko # 创建SSH客户端 ssh = paramiko.SSHClient() # 自动添加主机密钥 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 密钥文件路径 key_path = '/root/.ssh/id_rsa' # 密钥密码,如果没有设置则为None key_password = 'password' # 密钥对象 private_key = paramiko.RSAKey.from_private_key_file(key_path, password=key_password) # 连接远程服务器 ssh.connect('hostname', port=22, username='username', pkey=private_key) # 执行命令 stdin, stdout, stderr = ssh.exec_command('ls') # 输出命令执行结果 print(stdout.read().decode()) # 关闭连接 ssh.close() ``` - 自定义日志 ```python import paramiko import logging # 创建SSH客户端 ssh = paramiko.SSHClient() # 自动添加主机密钥 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 创建日志记录器 logger = logging.getLogger('paramiko') logger.setLevel(logging.DEBUG) # 创建日志处理器 handler = logging.StreamHandler() handler.setLevel(logging.DEBUG) # 创建日志格式化器 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # 添加日志处理器 logger.addHandler(handler) # 连接远程服务器 ssh.connect('hostname', port=22, username='username', password='password') # 执行命令 stdin, stdout, stderr = ssh.exec_command('ls') # 输出命令执行结果 print(stdout.read().decode()) # 关闭连接 ssh.close() ``` 总之,ParamikoPython中一个非常强大的SSH协议,其功能十分丰富,可以满足大部分远程操作的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值