Press "Enter" to skip to content

VNC over SSH tunnel

VNC over SSH tunnel, 意为建立在SSH通道上的VNC. 这样做可以达到2个目的, 一是可以增强VNC的安全性, 二是如果VNC速度太慢, 可以走SSH通道作为代理. 本文介绍其配置方法.

使用环境:
A机在韩国, IP为1.1.1.1, 速度较快
B机在美国, IP为8.8.8.8, 速度慢, 且有一个VNC桌面(ID号为:55)
由于我们直接连接B机的VNC桌面会非常慢, 此时我们可以借助A机的SSH服务跳转, 以达到加速VNC桌面的目的.
本地也是Linux环境, 本机有多位用户需要登陆到美国的VNC桌面上

1, 在A机(用于代理的机器)上以bear用户的身份生成SSH-Key, 并将私钥拷贝回本地

ssh-keygen -t rsa    #一路回车即可
chmod 700 ~/.ssh
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys      #必须做,否则在连接VNC的时候仍需要输入bear的密码

然后将私钥(id_rsa文件)拷贝回本地, 注意不是id_rsa.pub文件.

2, 在本地(也是Linux系统)指定SSH Tunnel相关参数

sudo apt-get install xvnc4viewer    #安装VNC客户端

#定义VNC_VIA_CMD变量,指定SSH代理的端口(22),key文件(id_rsa),用户名(bear)
chmod 600 /home/bear/id_rsa         #必须是600权限,否则仍需要输入密码
export VNC_VIA_CMD='/usr/bin/ssh -x -p 22 -i /home/bear/id_rsa -l bear -f -L %L:%H:%R %G sleep 20'

然后就可以使用SSH Tunnel了

vncviewer -via 1.1.1.1 8.8.8.8:55 -FullScreen  #使用SSH Tunnel连接远程VNC桌面
vncviewer 8.8.8.8:55 -FullScreen               #不使用SSH Tunnel,直接连接远程VNC桌面

小提示: 全屏状态下, 可以按F8键呼出右键菜单, 然后在右键菜单里退出全屏.

当然也可以写成如下格式

vim /etc/profile.d/vnc.sh    #写入如下2行
export VNC_VIA_CMD='/usr/bin/ssh -x -p 22 -i /home/bear/id_rsa -l bear -f -L %L:%H:%R %G sleep 20'
alias myvnc='vncviewer -via 1.1.1.1'

myvnc 8.8.8.8:55 -FullScreen    #使用SSH Tunnel连接远程VNC桌面

3, 多用户使用问题
在第2步中, 我们将/home/bear/id_rsa的权限设置成了600, 然后使用SSH Tunnel的时候才不会要求输入bear用户的密码. 细心的你肯定会发现, id_rsa的权限必须设置成600, 如果你把它设置是660的话, 使用SSH Tunnel时会遇到Permissions 0660 for ‘/…/id_rsa’ are too open.并且要求再次输入SSH密码. 这意味着, 只有一个人(即id_rsa文件的属主)可以使用这个SSH Tunnel.

解决办法:
如果id_rsa文件的属主是root的话, 那么该文件的权限可以被设置是440.

chown root:mygroup /home/bear/id_rsa
chmod 440 /home/bear/id_rsa

然后, 只要是mygroup组里的用户, 都可以使用此id_rsa文件来使用SSH Tunnel了. 有人说在CentOS6里设置成660同样有效, 我没有试过, 有兴趣的同学自己测试一下吧.

Leave a Reply

Your email address will not be published. Required fields are marked *