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 [email protected]

然后在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,
相关推荐
Java技术小馆4 分钟前
打印高质量日志的10条军规
java·后端·面试
belong_to_you12 分钟前
python模块——tqdm
python
L_cl43 分钟前
【Python 算法零基础 4.排序 ⑪ 十大排序算法总结】
python·算法·排序算法
Vertira1 小时前
Pytorch安装后 如何快速查看经典的网络模型.py文件(例如Alexnet,VGG)(已解决)
人工智能·pytorch·python
老歌老听老掉牙1 小时前
使用 SymPy 进行向量和矩阵的高级操作
python·线性代数·算法·矩阵·sympy
DX_dove1 小时前
pytorch3d+pytorch1.10+MinkowskiEngine安装
人工智能·pytorch·python
且慢.5891 小时前
Python——day46通道注意力(SE注意力)
python·深度学习·机器学习
简诚2 小时前
PPHGNetV2源代码解析
python·深度学习·机器学习
陈随易2 小时前
Element Plus 2.10.0 重磅发布!新增Splitter组件
前端·后端·程序员
陈随易2 小时前
2025年100个产品计划之第11个(哆啦工具箱) - 像哆啦A梦口袋一样丰富的工具箱
前端·后端·程序员