Ubuntu下通过SSH转发X窗口需要具备的条件

http://blog.youkuaiyun.com/ggicci/article/details/8238118


我们可以通过 Ubuntu 自带的 SSH 来远程登录自己的主机:比如 ssh ggicci@***.***.***.***(IP),有的时候我们希望在当前机器上调用远程的一些有界面的程序,比如说firefox。那么这就需要一些条件了。

        连接ssh可能发生的错误(我遇到的):

  • Network Error : Connection Refused.(你可以先 ping 远程主机的 IP,如果 Ping 通,说明你的机子还缺少 X 转发的条件,请看下面)


        现在我们的远程机器称为服务端(Server),当前机器成为客户端(Client),我们通过客户端来连接远程主机(即服务端),如果需要服务端提供X窗口转发的功能,也就是在客户端能调用远程的火狐浏览器等需要界面支持的程序,那么条件如下:

 

  • 在客户端,通过在 ssh 命令添加 –X(大写的哦)参数来启用 X11 转发,不过你可以通过设置~/.ssh/config 文件中 ForwardX11 yes 来使得X11转发为所有的连接或者指定的连接是默认的。
  • 在服务端,/etc/ssh/sshd_config 中必须指定X11Forwarding yes ,默认是 no(不过有些Linux版本默认是yes),用户是不能覆盖这个设置的。
  • 在服务端还必须装有 xauth 。如果机子上有任何 X11 的程序,xauth 很有可能就已经装好了。在不太可能的情况下,xauth 被安装在一个不标准的地方,你可以通过~/.ssh/rc 来调用它(服务端哦)。
  • 需要注意的是,你不需要在服务端做任何环境变量的修改。 DISPLAY 和 XAUTHORITY 会自动地被设置为正确的值。如果你在执行 ssh 命令的过程中报错说DISPLAY 没有设置好,那么说明 ssh 根本就没有转发 X11 连接。
  • 来确认 ssh 转发 X11,通过 ssh –v –X 检查,如果有一行输出中包含 Requesting X11 forwarding,说明服务端有转发 X11 的能力了。

 

        如果机子上没有 ssh,通过以下命令安装: sudo apt-get install openssh-server openssh-client 。


### 配置 SSH 端口转发Ubuntu 到 Mac #### 设置本地端口转发 为了实现从Ubuntu到Mac的SSH端口转发,可以利用SSH客户端提供的 `-L` 参数来创建一个本地端口转发。这允许连接至本机上的指定端口的数据被透明地转发到远程主机上。 假设目标是在Ubuntu机器上监听某个特定端口(比如8080),并将该端口接收到的所有流量通过SSH隧道发送给位于局域网内的Mac计算机,并最终到达其内部的服务(例如HTTP服务)。那么可以在Ubuntu终端执行如下命令: ```bash ssh -L 8080:localhost:80 user@mac_ip_address ``` 这里 `user` 是指用于登录Mac系统的用户名;而 `mac_ip_address` 应替换为实际的目标Mac设备在网络中的IP地址[^2]。 此命令的作用是从Ubuntu发起一次SSH会话并保持连接,在这段时间内任何尝试访问Ubuntu自身的8080端口的请求都会经由这个加密通道传送到Mac电脑对应的80端口上去处理。 #### 远程端口转发 如果需求反过来——即希望外部网络能够通过访问Mac公开暴露的一个端口号进而触达处于私有网络环境下的Ubuntu服务器,则需要用到远程端口转发功能。此时应采用 `-R` 参数: ```bash ssh -R mac_port:ubuntu_private_ip:local_service_port user@public_mac_ip ``` 其中 `mac_port` 表示想要开放于Mac上面供外界访问的那个端口编号;`ubuntu_private_ip` 和 `local_service_port` 分别对应着Ubuntu所在子网里的静态或动态分配得到的IPv4地址以及欲映射过来的应用层协议所占用的具体端口号[^3]。 需要注意的是,上述两种方式都依赖于SSH服务本身的安全性和配置情况,因此建议事先确认好两端防火墙策略、SELinux状态等因素以免影响正常使用效果。 #### 实际案例展示 考虑这样一个场景:有一台运行Web应用的Ubuntu服务器部署在一个仅限内网可触及的位置,现在希望通过一台拥有公网出口条件的Mac笔记本作为跳板让远在他乡的朋友也能顺利浏览网页内容而不必担心复杂的路由设置问题。这时就可以按照下面的方法来进行操作了: 1. **准备阶段** * 获取Ubuntu服务器在当前LAN环境下稳定可用的一组IP与端口组合; * 明确Mac端愿意提供出来共享使用的对外接口位置及其关联参数。 2. **实施过程** * 在Mac侧开启相应的入站规则以便接受来自互联网方向的新建TCP链接请求; * 执行带有适当选项设定好的SSH指令完成整个链路搭建工作: ```bash ssh -R 9000:192.168.x.y:80 friend_user@friend_public_ip ``` 以上就是关于如何配置SSH端口转发从而使得数据能够在Ubuntu和Mac两套异构平台间顺畅流通的大致介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值