IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 使用paramiko免密跨多个跳板机ssh访问目标机器并执行命令获取结果 -> 正文阅读

[系统运维]使用paramiko免密跨多个跳板机ssh访问目标机器并执行命令获取结果

【python】直接使用linux ssh命令在多跳板机情况下设置免密直接登录


本地 --> 跳板机1 --> 跳板机2 -> 目标机器1

ssh-keygen -t rsa 生成公钥和私钥 
将公钥写入到所有跳转机的帐户的authorized_keys中实现免密

config文件

HOST 跳板机1jumper
    Hostname 100.67.76.9
    Port 57822
    User root
    IdentityFile ~/.ssh/id_rsa
  
Host 跳板机2
    Hostname 10.141.250.1
    Port 22
    User root
    IdentityFile ~/.ssh/id_rsa
    ProxyCommand ssh.exe 跳板机1jumper -W %h:%p
  
Host 目标机器1
    Hostname 10.141.35.34
    Port 22
    User root
    IdentityFile ~/.ssh/id_rsa
    ProxyCommand ssh.exe 跳板机2 -W %h:%p
    
Host 目标机器2
    Hostname 10.141.1.50
    Port 22
    User root
    IdentityFile ~/.ssh/id_rsa
    ProxyCommand ssh.exe 跳板机2 -W %h:%p

mobaxterm工具实现代理免密跳转
在这里插入图片描述

本地 --> 跳板机1 --> 跳板机2 -> 目标机器1
#这是一个例子如何使用paramiko来进行多个跳板机并使用公钥免密情况下,ssh访问目标机器并执行命令获取结果
#coding:utf-8
import paramiko
import os
import io

# 获取本地ssh config配置
def get_ssh_config(): 
    ssh_config = paramiko.SSHConfig()
    user_config_file = os.path.expanduser("~/.ssh/config")
    with io.open(user_config_file, 'rt', encoding='utf-8') as f:
        ssh_config.parse(f)
    return ssh_config

# 获取已建立连接的paramiko.SSHClient,可以直连,也可以通过指定sock通道做代理来连接
def get_connect_host(host_ssh_config, sock_channel):
    key_path = host_ssh_config['identityFile'][0]
    private_key = paramiko.RSAKey.from_private_key_file(key_path)
    host = paramiko.SSHClient()
    host.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    host.connect(host_ssh_config['hostname'], port = int(host_ssh_config['port']), username = host_ssh_config['user'], pkey = private_key, sock = sock_channel) 
    return host

# 通过已建立连接的paramiko.SSHClient来建立sock通道
def get_sock_channel(connect_host, dest_ssh_config, local_ssh_config):
    transport = connect_host.get_transport()
    dest_addr = (dest_ssh_config['hostname'], int(dest_ssh_config['port']))
    local_addr = (local_ssh_config['hostname'], int(local_ssh_config['port']))
    channel = transport.open_channel("direct-tcpip", dest_addr, local_addr)
    return channel

ssh_config = get_ssh_config()
jumper_conf = ssh_config.lookup('跳板机1jumper')
ops_conf = ssh_config.lookup('跳板机2')
gateway_client_conf = ssh_config.lookup('目标机器1')

jumper_host = get_connect_host(jumper_conf, None)
jumper_channel = get_sock_channel(jumper_host, ops_conf, jumper_conf)

ops_host = get_connect_host(ops_conf, jumper_channel)
ops_channel = get_sock_channel(ops_host, gateway_client_conf, ops_conf)

gateway_client = get_connect_host(gateway_client_conf, ops_channel)

stdin, stdout, stderr = gateway_client.exec_command("df -h")
print stdout.read()

gateway_client.close()
ops_host.close()
jumper_host.close()
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:31:42  更:2022-01-16 13:33:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:31:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码