家里有一台闲置的旧MacBook苹果电脑,平时会连在电视上给女儿放动画片。在家时我会用手头的新苹果电脑通过「屏幕共享」(Screen Sharing.app),连接上局域网里的旧电脑来操作播放。但如果我不在家,就没办法连回这台旧电脑了。于是我开始研究如何解决这个问题。
最简单的办法莫过于使用第三方的远程控制/远程登录/远程管理类的软件,如TeamViewer。但这类软件一般并不免费且不便宜,或者免费但限制可用机器数量,实在不想折腾时,可作为备选方案。
那么还是从苹果自带的软件入手。既然在局域网中可以使用「屏幕共享」来远程连接,那么只要在路由器上配置一下端口映射,理应就可以从外网来连上旧电脑。查询了一下「屏幕共享」的默认端口为5900,在路由器上配置完端口映射,查询了路由器的公网IP地址,然后在新电脑上打开「屏幕共享」App,输入公网IP,果然成功连上。
但这样把旧电脑的连接端口暴露在公网上,还可以直接通过输入用户名和密码登录,安全性实在堪忧,所以更好的办法显然是建立SSH隧道来实现连接。同时,还可以通过路由器的端口映射隐藏真实的SSH连接端口,并强制要求用RSA密钥验证建立隧道连接,这样在新电脑上只要建立好SSH隧道连接,就可以像在本地网络中一样访问旧电脑的「屏幕共享」了。
其次是公网IP的问题,路由器的公网IP可能会被网络服务商动态更换,因此还需要利用动态域名服务来自动更新公网IP。由于家里的 phylogenetically 小米路由器支持动态域名功能,只要找一家动态域名商注册个域名即可。
接下来就是详细的流程:
Port Blair 步骤一、在新电脑上创建RSA密钥对。估计大部分程序员已经可以省掉这一步,当然也可以专门再生成一套密钥对。
步骤二、找一家动态域名服务商注册,并部署到路由器中。为了方便下面引用,假设注册的动态域名是example.ddns.com。
步骤三、在路由器上设置端口映射。以小米路由器为例,找到「端口转发」,填上旧电脑的局域网IP地址,外部端口填写一个随机端口号比如35791,内部端口号也填写一个随机端口号比如36922。注意下面步骤中不同地方对应的这两个端口号。
步骤四、配置部署SSH隧道。
在旧电脑上做如下操作:
1、修改sshd服务的配置文件/etc/ssh/sshd_config:
Port 36922 #对应上路由器中配置的内部端口号
PubkeyAuthentication yes #启用公钥验证
PasswordAuthentication no #取消密码验证
PermitTunnel yes #允许建立隧道。
2、添加新电脑上的RSA公钥到~/.ssh/authorized_keys
。
3、在「系统设置」-「通用」-「共享」中启用「屏幕共享」和「远程登录」。
4、[可选] 打开Terminal或iTerm终端,执行一句命令:
sudo defaults write /Library/Preferences/com.apple.RemoteManagement RestoreMachineState -bool NO
用新电脑远程登录上旧电脑后如果断开连接,旧电脑就会自动锁屏,执行这句命令后,可以确保旧电脑仍会继续播放动画片而不锁屏。
在新电脑上做如下操作:
1、修改~/.ssh/config,添加
Host home-mac
Hostname example.ddns.com
Port 35791
User YOUR_USERNAME
IdentityFile ~/.ssh/id_rsa
ServerAliveInterval 120
注意:(1)35791对应于路由器端口映射处设置的外部端口;(2)要将上面的YOUR_USERNAME修改为旧电脑上的用户名;(3)这里私钥使用的默认路径和名称,如果步骤一中生成了专门的密钥对,这里记得改成相应的路径和名称。
2、创建一个back-home.sh文件,添加下面的脚本代码
!/usr/bin/env bash
ssh -Nv -L 5901:localhost:5900 home-mac
创建完用chmod a+x back-home.sh
给文件加上可执行权限,然后执行它就可以建立起SSH隧道了。
步骤五、在新电脑上打开「屏幕共享」App,新建一个连接并输入localhost:5901,然后点连接按钮,如果一切顺利就可以看到旧电脑的屏幕了。
至此,完整的苹果电脑远程控制就已实现。每次当女儿给我发来微信要看动画片时,我就会用新电脑先在iTerm里执行back-home.sh建立SSH隧道,然后再打开「屏幕共享」远程登录回家中旧电脑,给她播放动画片。
不过如果电脑不在身边,或正好在路上,而手上只有一部iPhone该怎么办呢?下一篇继续讲用iPhone远程连回旧电脑的办法。
One thought on “如何远程给女儿放动画片”