django paramiko 跳转登录

在使用Django框架结合Paramiko进行SSH远程操作时,通常涉及到自动化脚本的执行,比如远程服务器上的命令执行、文件传输等。如果你的需求是"跳转登录",即在登录远程服务器后,再通过该服务器的SSH连接跳转到另一台服务器(例如,通过SSH代理或端口转发),你可以通过以下几种方式实现:

  1. 使用SSH端口转发(Port Forwarding)
    这是最常用的方法之一,可以在第一次连接时设置端口转发,使得后续的连接可以通过这个转发的端口直接访问目标服务器。
cpp 复制代码
import paramiko
 
# 创建SSH对象
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 
# 连接到第一台服务器
ssh.connect('server1.example.com', username='user1', password='password1')
 
# 设置端口转发
local_port = 2222  # 本地端口
remote_host = 'server2.example.com'  # 目标服务器地址
remote_port = 22  # 目标服务器SSH端口,通常是22
ssh.get_transport().set_keepalive(300)  # 设置保持活动,防止连接超时
ssh.get_transport().request_port_forward('', local_port, (remote_host, remote_port))
 
# 现在你可以通过localhost:local_port连接到server2
ssh2 = paramiko.SSHClient()
ssh2.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh2.connect('localhost', local_port, username='user2', password='password2')
  1. 使用SSH代理(ProxyCommand)
    在某些情况下,如果你使用的是支持ProxyCommand的SSH客户端,你可以在.ssh/config文件中设置代理:
cpp 复制代码
Host server1
    HostName server1.example.com
    User user1
    IdentityFile /path/to/private/key
    
Host server2-via-server1
    HostName server2.example.com
    User user2
    ProxyCommand ssh -W %h:%p user1@server1.example.com

然后在Python中使用:

cpp 复制代码
import paramiko
 
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('server2-via-server1', username='user2', password='password2')
  1. 使用SSH的Agent Forwarding(适用于密钥认证)
    如果你希望使用SSH密钥进行认证,可以使用agent forwarding:
cpp 复制代码
import paramiko
 
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('server1.example.com', username='user1')  # 直接使用本地SSH agent进行认证
 
# 启用agent forwarding到server2
transport = ssh.get_transport()
channel = transport.open_channel("direct-tcpip", ("server2.example.com", 22), ("localhost", 0))
channel.set_name("agent-forwarding")  # 设置一个名称以便于管理多个通道
channel.get_pty()  # 获取一个伪终端(可选)
channel.invoke_shell()  # 启动shell会话
print(channel.recv(1000).decode())  # 显示欢迎信息等(可选)
  1. 使用第三方库如fabric或invoke简化操作
    如果你觉得Paramiko过于底层,可以使用fabric或invoke等更高级的库来简化SSH操作:
cpp 复制代码
from fabric import Connection, Config, OperationTimeoutExceededError, task,
相关推荐
陈随易1 小时前
Postman 被曝自动往 Claude Code 和 Codex 装插件
前端·后端·程序员
belldeep3 小时前
python:genesis-world, Genesis-Embodied-AI
人工智能·python·ai·genesis
云-缩影3 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
benchmark_cc4 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
维克兜率天4 小时前
【维克】趋势型CTA:期货市场的“追涨杀跌“
人工智能·python
考虑考虑4 小时前
Posrgresql恢复.backup文件
数据库·后端·postgresql
无奈何杨4 小时前
风控决策系统决策流,策略模式,权重、顺序、投票、最坏
后端
取名真是5 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
梦想不只是梦与想5 小时前
PyTorch、CPU、GPU、CUDA
人工智能·pytorch·python·深度学习·机器学习·cuda
数字融合5 小时前
透明化视频孪生危化安全管控解决方案
人工智能·python·安全