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

发表于:2007-07-04来源:作者:点击数: 标签:
远程桌面设置part2:利用putty进行vnc+sshtunneling 作者:yunqingatchinaunix.net [b:0895ada35e]转贴请注明出处[/b:0895ada35e] 在前面有vncserver设置的文章( http://bbs.chinaunix.net/forum/viewtopic.php?t=368552nbsp;我们已经可以在一个 linux 的 服

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

作者:yunqing at chinaunix.net
[b:0895ada35e]转贴请注明出处[/b:0895ada35e]

在前面有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

[b:0895ada35e]情形一: vnc客户端为linux[/b:0895ada35e]
这种情形很简单,一般的linux发行版本里面都默认安装了ssh套件.
1. 用ssh登录到服务器
[code:1:0895ada35e]ssh -L 5901:localhost:5901 -l foo myserver[/code:1:0895ada35e]
或者直接用ip地址
[code:1:0895ada35e]ssh -L 5901:localhost:5901 -l foo 192.168.x.x[/code:1:0895ada35e]
2. 在本机的另外开的终端上,运行vncviewer (或其它的类似工具)
vncviewer localhost:1

[b:0895ada35e]情形二: vnc客户端为windows[/b:0895ada35e]
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?

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

javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">

附图二




附图一


 李隆基 回复于:2005-02-13 03:14:55
十分感谢!

 speed_fj 回复于:2005-02-13 07:50:34
现在多数都用的交换机 尽量避免使用HUB 抓包偷密码已经不太现实  明文传输密码的太多了 用的FTP POP3都是的 呵呵 个人觉得也不需要那么麻烦

 yunqing 回复于:2005-02-13 20:33:32
[quote:a0d3b87f82="speed_fj"]现在多数都用的交换机 尽量避免使用HUB 抓包偷密码已经不太现实  明文传输密码的太多了 用的FTP POP3都是的 呵呵 个人觉得也不需要那么麻烦[/quote:a0d3b87f82]
如果你的环境只是几个人的小环境,确实无此必要。我这里讲的不是局域网,是通过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
[quote:b6d6938a64="speed_fj"]即使通过INTERNET 你又如何能用SNIFFER或者TCPDUMP抓包监听呢?
不可能的 如果木马植在你机器里 你再加密也没用 因为它早把你键盘输入的字符给传送出去了

现在大多是采用交换机 你最多只能监听广播frame[/quote:b6d6938a64]

有道理,不过你我做不到的别人不一定做不到。 话又说回来,我也没有说你不用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
[quote:a0d5cff16e="carrison"]putty是好东西,不过vnc值得商榷。vnc优点是小巧,可以远程安装,客户端支持浏览器,支持多平台(win9x,win2k,xp,...unix/linux,...)。缺点是速度较慢。在LAN内vnc确实是个好东东,俺就用它,但通过internet来控制?..........[/quote:a0d5cff16e]
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
[quote:d69bc24823="carrison"]还有,vnc不支持多用户同时使用。如果客户端用浏览器需要java虚拟机支持,java的速度大家都清楚。在win平台上,比vnc快的远程控制工具比比皆是。我比较倾向于终端服务。但在unix平台上支持tcp协议的远程图形控制工具..........[/quote:d69bc24823]

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

[quote:d69bc24823]但在unix平台上支持tcp协议的远程图形控制工具相对比较欠缺,Exceed,xmanager等都是通过广播方式不能跨路由...[/quote:d69bc24823]
如果不使用ssh等辅助工具是有这个问题。不过ssh tunneling 以后,没有问题。

 yunqing 回复于:2005-02-16 00:13:36
[quote:3d575c203a="岚轩"]我喜欢更直接一点:
1.一般情况下应该这样吧:图1中的IP地址应该是VNC SERVER的外网IP,如210.59.67.125,其余不变!
关于图2,我有几个提问:
A.local的含义是?把上述IP&端口转发到本地(客户端)?
remote的含义是:把上?..........[/quote:3d575c203a]

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
[quote:98e5b634f9="yunqing"]

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

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

当vncviewr 试图打开本地的localhost:5901时,ss..........[/quote:98e5b634f9]

你这篇东西 可能 就是困扰我很久的一个问题的解决方案
在公司内网有台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
[quote:20e75f3a69="Hex"]

你这篇东西 可能 就是困扰我很久的一个问题的解决方案!
在公司内网有台linux Server,地址是私有地址。然后通过一台防火墙路由器连internet,希望能通过internet实现远程管理。目前的方法是先telnet到路由器上?..........[/quote:20e75f3a69]
我上面的例子中两台机器均有公网的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

原文转自:http://www.ltesting.net