ChinaUnix首页 > 精华文章 > Linux > 正文

[原创] 远程桌面设置part2:利用putty进行vnc + ssh tunneling


http://www.chinaunix.net 作者:yunqing  发表于:2008-02-27 18:43:19
发表评论】 【查看原文】 【Linux讨论区】【关闭

远程桌面设置part2:利用putty进行vnc + ssh tunneling

作者:yunqing at chinaunix.net
转贴请注明出处

在前面有vnc server 设置的文章(http://bbs.chinaunix.net/forum/viewtopic.php?t=368552&highlight=yunqing)里, 我们已经可以在一个linux的服务器上运行vncserver来进行远程访问了,但需要注意的是,如果直接使用vncviewer来进行访问,有两点不利因素:
1. 口令传输是明文,很容易被侦听到.
2. 防火墙需要打开59xx端口,这在通常的单位里是不可能的.
幸运的是,我们有ssh这个强大的工具,象X11 Forwarding(另文论述),我们可以使用ssh隧道来保护通讯过程,下面就进行简单介绍.

假设vncserver运行在服务器 myserver (ip地址为:192.168.x.x)的屏幕1,也就是侦听 192.168.x.x:5901, 用户名为foo

情形一: vnc客户端为linux
这种情形很简单,一般的linux发行版本里面都默认安装了ssh套件.
1. 用ssh登录到服务器
ssh -L 5901:localhost:5901 -l foo myserver

或者直接用ip地址
ssh -L 5901:localhost:5901 -l foo 192.168.x.x

2. 在本机的另外开的终端上,运行vncviewer (或其它的类似工具)
vncviewer localhost:1

情形二: vnc客户端为windows
1. 下载一个ssh客户端,个人推荐putty,只有一个程序,不需要安装,简单而功能齐全. 到这里下载http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
下载putty.exe到桌面上直接运行即可。
2. 运行putty,输入服务器的ip地址,输入一个名字,这里myserver作为session的名字,按save保存。见附图一
3. 单击对话框左边的tunnels来选择相关设置,在source port里输入5901,在Destination里输入localhost:5901,按Add添加,如附图二
4. 单击左边session,回到session设置,按save重新保存。按open即可登录到服务器。
5. 运行vnc-viewer (如果没有,到这里下载http://www.realvnc.com/download.html,只要一个exe的文件就行),在Server里输入localhost:1,见附图三, 输入口令后一个linux的桌面就会出现在windows里,并且是非常安全的,Cool?

另请参阅:
远程桌面设置part1:VNCserver在Fedora上配置过程(转译)(http://bbs.chinaunix.net/forum/viewtopic.php?t=368552&highlight=yunqing)



附图二





附图一





 李隆基 回复于:2005-02-13 03:14:55

十分感谢!


 speed_fj 回复于:2005-02-13 07:50:34

现在多数都用的交换机 尽量避免使用HUB 抓包偷密码已经不太现实  明文传输密码的太多了 用的FTP POP3都是的 呵呵 个人觉得也不需要那么麻烦


 yunqing 回复于:2005-02-13 20:33:32

引用:原帖由 "speed_fj"]现在多数都用的交换机 尽量避免使用HUB 抓包偷密码已经不太现实  明文传输密码的太多了 用的FTP POP3都是的 呵呵 个人觉得也不需要那么麻烦
 发表:


如果你的环境只是几个人的小环境,确实无此必要。我这里讲的不是局域网,是通过internet的vnc。

不要将ftp,pop3和这种情况相提并论,想想有几个server能胆大到允许本机用户通过ftp登录,而且pop3加密的也多得是。

不妨做一下survey看一看大多数使用vnc工作的人是否使用ssh,我是指工作,不是拿来做作试验,新鲜新鲜。


 speed_fj 回复于:2005-02-13 21:47:13

即使通过INTERNET 你又如何能用SNIFFER或者TCPDUMP抓包监听呢?
不可能的 如果木马植在你机器里 你再加密也没用 因为它早把你键盘输入的字符给传送出去了

现在大多是采用交换机 你最多只能监听广播frame


 yunqing 回复于:2005-02-14 05:39:24

引用:原帖由 "speed_fj" 发表:
即使通过INTERNET 你又如何能用SNIFFER或者TCPDUMP抓包监听呢?
不可能的 如果木马植在你机器里 你再加密也没用 因为它早把你键盘输入的字符给传送出去了

现在大多是采用交换机 你最多只能监听广播frame



有道理,不过你我做不到的别人不一定做不到。 话又说回来,我也没有说你不用ssh有什么不对,或者是用了就一定安全(我指的是抗攻击的能力,不是木马)。 问题是ssh已经成为远程访问的标准, 安全性和传统的telnet孰高孰低也有定论, 在此不再讨论,如有兴趣参阅有关安全的文章。 至于说到木马的问题,我看是为辩论而辩论,没有什么意思。 正如你没有好好保存自己的钥匙,再好的锁也没有用(更不用说通常的SSH可以不用输入密码访问的,只是我没有提到而已)。


 carrison 回复于:2005-02-14 11:02:12

putty是好东西,不过vnc值得商榷。vnc优点是小巧,可以远程安装,客户端支持浏览器,支持多平台(win9x,win2k,xp,...unix/linux,...)。缺点是速度较慢。在LAN内vnc确实是个好东东,俺就用它,但通过internet来控制,似乎不是最佳方案...


 yunqing 回复于:2005-02-14 20:36:38

引用:原帖由 "carrison"]putty是好东西,不过vnc值得商榷。vnc优点是小巧,可以远程安装,客户端支持浏览器,支持多平台(win9x,win2k,xp,...unix/linux,...)。缺点是速度较慢。在LAN内vnc确实是个好东东,俺就用它,但通过internet来控制..........
 发表:


vnc本来就是为低带宽和慢速连接设计的,在internet上正是物尽其用,我还没有发现速度比vnc快的类似的东东(远程图形),如有新发现,还望不吝赐教。

在局域网上,用windows平台上的xserver就行了,如很有名的Exceed等。如果要安全一些,加上ssh 的X11 Forwarding。 但个人的经验,即便如此,此种方式也还是没有vnc快,特别是需要大量图形数据传输的情况下, 因为这种X11网络协议并没有为图形数据做太多的优化,如压缩等。

vnc的另外一个好处是跨平台,比如用unix远程访问windows的desktop。当然现在windows有了Remote Desktop (XP Professional中)而且linux中也有了这种的客户端,所以这样的用法就相对少了一些。但不是说没有,我曾在一个环境,大部分是IRIX和Solaris,大家就只好用vnc来共享一个运行windows的机器。


 speed_fj 回复于:2005-02-14 23:44:26

呵呵 随便大家讨论一下

vnc是不错 很方便 算是LINUX上比较简单的工具了 要显示桌面用VNC 如果只是GUI程序用X-WIN32更方便点 呵呵


 carrison 回复于:2005-02-15 09:38:25

还有,vnc不支持多用户同时使用。如果客户端用浏览器需要java虚拟机支持,java的速度大家都清楚。在win平台上,比vnc快的远程控制工具比比皆是。我比较倾向于终端服务。但在unix平台上支持tcp协议的远程图形控制工具相对比较欠缺,Exceed,xmanager等都是通过广播方式不能跨路由...


 岚轩 回复于:2005-02-15 10:00:32

我喜欢更直接一点:
1.一般情况下应该这样吧:图1中的IP地址应该是VNC SERVER的外网IP,如210.59.67.125,其余不变!
关于图2,我有几个提问:
A.local的含义是?把上述IP&端口转发到本地(客户端)?
remote的含义是:把上述IP&端口转发到远程(服务端)?(此类情况只在5901被防火墙挡掉后才有效,不过此法不大用)
dynamic虽有动态之意,却不知怎么变化?
B.你的方法好象只在5901确实被防火墙挡掉时才生效啊!?我远程一机器22,5901都开的,此法无效~
大家来说说 ~


 yunqing 回复于:2005-02-16 00:04:19

引用:原帖由 "carrison"]还有,vnc不支持多用户同时使用。如果客户端用浏览器需要java虚拟机支持,java的速度大家都清楚。在win平台上,比vnc快的远程控制工具比比皆是。我比较倾向于终端服务。但在unix平台上支持tcp协议的远程图形控制工具..........
 发表:



我不是vnc的提倡者。
引用:vnc不支持多用户同时使用

不会吧,我的server上开了好几个呢,只不过需要指定不同的screen而已,对应于不同的端口。确切地说,vnc不适用于大量用户同时登录的情况,因为每个用户需要启动一个vnc实例,而每个实例相当于一个Xserver,耗费资源。 至于java+浏览器的客户端我没有用过,肯定慢。我的环境是512K adsl 的internet,效果还可以,(全彩色运行没有问题)。至于windows的终端服务,我也在用(因为大部分时间在家工作),感觉不到速度的差别. 另外一个是成本的问题,windows的终端服务的license可是一笔不小的开销。

引用:但在unix平台上支持tcp协议的远程图形控制工具相对比较欠缺,Exceed,xmanager等都是通过广播方式不能跨路由...

如果不使用ssh等辅助工具是有这个问题。不过ssh tunneling 以后,没有问题。


 yunqing 回复于:2005-02-16 00:13:36

引用:原帖由 "岚轩" 发表:
我喜欢更直接一点:
1.一般情况下应该这样吧:图1中的IP地址应该是VNC SERVER的外网IP,如210.59.67.125,其余不变!
关于图2,我有几个提问:
A.local的含义是?把上述IP&端口转发到本地(客户端)?
remote的含义是:把上..........



ssh tunnel的含义如下,vnc只是其中的一个例子

远程vnc主机监听5901端口 <------------>;ssh tunnel <------->;本地主机5901(localhost:5901)

当vncviewr 试图打开本地的localhost:5901时,ssh将该请求转发到远端de5901端口。
应该跟防火墙没有关系,或者说我不明白你的防火墙的具体设置


 carrison 回复于:2005-02-16 08:31:47

unix下vnc可以同时运行多个实例,windows上好像不行,可能需要手工添加service设置不同端口。

在防火墙上5800和5900都要开放吧?开放一个好像不行


 yalcm 回复于:2005-02-18 07:44:37

up! It is really a good post. 3q!


 Hex 回复于:2005-02-18 14:13:59

引用:原帖由 "yunqing" 发表:


ssh tunnel的含义如下,vnc只是其中的一个例子

远程vnc主机监听5901端口 <------------>;ssh tunnel <------->;本地主机5901(localhost:5901)

当vncviewr 试图打开本地的localhost:5901时,ss..........



你这篇东西 可能 就是困扰我很久的一个问题的解决方案!
在公司内网有台linux Server,地址是私有地址。然后通过一台防火墙路由器连internet,希望能通过internet实现远程管理。目前的方法是先telnet到路由器上,然后再由路由器telnet到linux server上。这种方法就是不大安全并且只有console没有图形界面。

有个不明白的地方:
图1中的IP地址是私网地址,你如果是通过internet的话怎么可能访问的到呢?


 zor 回复于:2005-02-21 16:39:58

其实不局限于 vnc 2000的很多管理工具都可以使用ssh地址转移出来不过都要是TCP的,快慢方便完全看自己,我想楼主也是想给大家提供一个方法。
3389 什么的 pcanywhere 不行把 telnet 转出来也可以。关键是ssh提供了一个加密通道。也可以使用别的通道软件主要还看自己喜欢。通道可以主动也可以被动,这样防火墙基本上就限制不了了,(有些黑客软件就是这样的)喜欢明码的朋友最好用telnet ,ssh太慢不适合你。交换机也是可以监听,老外就不要发言了。


 yunqing 回复于:2005-02-22 05:23:54

引用:原帖由 "Hex" 发表:


你这篇东西 可能 就是困扰我很久的一个问题的解决方案!
在公司内网有台linux Server,地址是私有地址。然后通过一台防火墙路由器连internet,希望能通过internet实现远程管理。目前的方法是先telnet到路由器上..........


我上面的例子中两台机器均有公网的IP


你的情况最好是架设一个vpn,这样通过internet可以访问你的整个私有网络。

如果只是想通过ssh连接到内网上个别机器,简单的方法是在与公网相连的路由器上做一个端口映射,将一个端口映射到要访问的server上的ssh端口22(或者其它你设定的用于ssh服务的端口)。这样就可以用上面的方法了。


 michael.zhang 回复于:2005-02-27 15:26:16

yunqing兄﹕
   非常高興看到你的此貼﹐這几天正為vncserver的問題頭大﹐但下面的﹕
“在前面有vnc server 设置的文章(http://bbs.chinaunix.net/forum/viewtopic.php?t=368552&highlight=yunqing)里”想參考﹐但打不開了﹐能不能再幫我傳一份﹐zj741111@sohu.com
thanks


 qkboy 回复于:2005-11-04 09:43:13

老实说,我不喜欢使用VNC。就算是在Internet 上,我都宁愿用putty配合x-win32做xwin程序的操作,就算是拨号,这也足够带宽了。比整个桌面的迁移要好很多。


 sirz 回复于:2005-12-03 23:23:09

太COOL了,我再也不用跟IPtable较劲了,非常感谢!


 佛光普照 回复于:2006-01-12 10:05:50

我来说两句,用VNC实在是不能满足远程控制桌面的要求。我需要的是和windows远程控制一样的效果,x-win32可以达到了。而且配置也很简单的哦。CU上都可以找的。


 japonensis 回复于:2006-01-13 11:23:24

引用:原帖由 佛光普照 于 2006-1-12 10:05 发表
我来说两句,用VNC实在是不能满足远程控制桌面的要求。我需要的是和windows远程控制一样的效果,x-win32可以达到了。而且配置也很简单的哦。CU上都可以找的。 


谁说vnc不可以远程控制??? 只能说明你没仔细研究
vnc有share模式,可以共享桌面,也可以使用独立会话, x11vnc可以把当前display 0 的显示发送到远程, ,,,,
不要说不行,只是你不会


 japonensis 回复于:2006-01-13 11:24:26

我还没发现vnc不能干的事


 Kenbaby 回复于:2006-03-24 14:52:46

22楼 Y根本就没理解到VNC是做什么的,楼上的表理它

不过所有的楼上的,VNC最大的长处是多用户演示和远程反向连接,而不是你们说的那些虾米JJYY的。


 awnun 回复于:2007-09-20 22:44:25

引用:原帖由 yunqing 于 2005-2-16 00:13 发表 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=3286011&ptid=495459]


ssh tunnel的含义如下,vnc只是其中的一个例子

远程vnc主机监听5901端口 ;ssh tunnel ;本地主机5901(localhost:5901)

当vncviewr 试图打开本地的localhost:5901时,ssh将该请求转发到远端de5901端 ... 





我想应该是这样理解

本地监听5901-->数据转发给ssh,ssh22连接远程计算机(通行规则)--->远程将22内的数据转发给远程的5901口(返回数据原路返回)


 hongling1122 回复于:2007-11-02 13:19:40

非常感谢……学到了不少……


 pierre0505 回复于:2007-11-21 08:25:32

老贴要翻新一下。顶一下


 诺夜 回复于:2008-02-27 18:43:19

十分感谢!:wink:




原文链接:http://linux.chinaunix.net/bbs/viewthread.php?tid=495459
转载请注明作者名及原文出处