You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu远程服务器SSH登录后调用本地浏览器显示链接的方法

这个需求我刚好折腾过,分两种常见场景给你具体方案,都是在Ubuntu环境下验证过的:

场景1:远程启动Web服务,自动在本地打开对应地址

如果你的Python脚本是启动一个Web服务(比如Flask/Django),需要本地浏览器自动访问这个远程服务,用SSH端口转发+本地脚本串联最方便:

  1. 写一个本地的bash脚本(比如remote_run_and_open.sh),把端口转发、远程执行脚本、本地打开浏览器的步骤串起来:
#!/bin/bash
# 替换成你的远程服务器用户名和地址
REMOTE_USER="your-remote-user"
REMOTE_HOST="your-remote-ip-or-domain"
# 远程Web服务的端口(比如脚本启动在8000)
REMOTE_PORT=8000
# 本地映射的端口(和远程一致就行,避免冲突)
LOCAL_PORT=8000
# 远程Python脚本的路径
REMOTE_SCRIPT_PATH="/path/to/your/script.py"

# 1. 后台建立SSH端口转发,把远程端口映射到本地
ssh -fNL ${LOCAL_PORT}:localhost:${REMOTE_PORT} ${REMOTE_USER}@${REMOTE_HOST}

# 2. 远程执行Python脚本(如果脚本需要后台运行,可以加&)
ssh ${REMOTE_USER}@${REMOTE_HOST} "python3 ${REMOTE_SCRIPT_PATH}"

# 3. 本地自动打开默认浏览器访问映射后的地址
xdg-open "http://localhost:${LOCAL_PORT}"
  1. 给脚本加执行权限:chmod +x remote_run_and_open.sh
  2. 运行脚本即可:./remote_run_and_open.sh
场景2:远程任意操作触发本地打开指定URL

如果需要远程脚本执行到某个逻辑节点时,主动通知本地打开任意URL(比如外部链接、本地文件地址等),用SSH反向隧道+本地监听服务实现:

第一步:本地准备监听服务

写一个简单的Python脚本(local_browser_trigger.py),用来监听本地端口,收到远程发来的URL后调用浏览器打开:

import socket
import subprocess
import sys

def main():
    # 监听本地的9000端口(可以自定义,只要不冲突)
    LISTEN_PORT = 9000
    try:
        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server.bind(('localhost', LISTEN_PORT))
        server.listen(1)
        print(f"Local trigger listener running on port {LISTEN_PORT}...")
        
        while True:
            client, addr = server.accept()
            # 接收远程发来的URL
            url = client.recv(1024).decode('utf-8').strip()
            if url:
                print(f"Received trigger: opening URL {url}")
                # 调用系统默认浏览器(Ubuntu用xdg-open,兼容所有桌面环境)
                subprocess.run(['xdg-open', url], check=True)
            client.close()
    except Exception as e:
        print(f"Error: {e}", file=sys.stderr)
        sys.exit(1)

if __name__ == "__main__":
    main()

先把这个脚本后台运行:

nohup python3 local_browser_trigger.py &

第二步:建立SSH反向隧道

登录远程服务器时,加上反向隧道参数,把本地的9000端口映射到远程的9000端口:

ssh -R 9000:localhost:9000 your-remote-user@your-remote-host

第三步:修改远程Python脚本

在需要触发本地浏览器的位置,添加以下代码,向远程的9000端口发送URL:

import socket

def trigger_local_browser(url):
    try:
        # 连接到映射过来的本地端口(远程的localhost:9000就是本地的9000)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect(('localhost', 9000))
        sock.sendall(url.encode('utf-8'))
        sock.close()
        print("Successfully triggered local browser")
    except Exception as e:
        print(f"Failed to trigger local browser: {str(e)}")

# 示例:在脚本逻辑完成后触发
if __name__ == "__main__":
    # 你的业务代码
    print("Running remote Python script...")
    # ... 执行你的操作 ...
    
    # 触发本地打开目标URL
    trigger_local_browser("https://example.com")

额外注意事项

  • xdg-open是Ubuntu桌面环境的通用命令,会自动调用你设置的默认浏览器;如果指定用Chrome,可以换成google-chrome,Firefox换成firefox。
  • 端口转发时如果遇到端口被占用,换个未使用的端口即可(比如把9000换成9001,两端保持一致)。
  • 如果需要长期运行本地监听服务,可以把它做成systemd服务,避免终端关闭后进程终止。

内容的提问来源于stack exchange,提问作者An0n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:46:07