架设SSH服务器与VNC远程桌面控制

19.1架设SSH Server

19.1.1 SSH协定及加密技术

还记得在第十一章介绍过的远端连线指令 telnet及ssh吧!由于telnet在资料传输过程的不安全,因此都鼓励大家使用ssh。 那要提供SSH 服务来给Client 端做远端连线时,当然就要架设SSH Server 了。

SSH 可以取代传统的r 指令(rsh、rlogin、rcp)、finger 及telnet 这一类较不安全的连线工具。 使用SSH (Secure SHell),可让我们所传输的资料都事先经过加密,因此Client 端可以使用scp 指令在两台电脑间很安全的复制资料,也可以使用sftp 指令来安心的存取ftp 服务。

SSH协定的版本

SSH 协定目前有SSH1 ( SSH protocol version 1 ) 及SSH2 ( SSH protocol version 1 ) 两种版本,当然现在的主流是SSH2,因为它提供了比SSH1 更安全的资料传输。

在SSH 上头,常见到的加密演算法有RSA、DSA 及Diffie-Hellman 等。 SSH1 主要是使用RSA 的加密技术,而SSH2 除了RSA 以外,还有DSA 及Diffie-Hellman 等等。

SSH加密流程

 SSH1加密技术
  
˙Client向SSH Server的22 port做出连线请求。
˙Server传送public key给Client:
关于这个地方,您需先了解什么是host key pair及server key pair。
host key pair是指存在于SSH Server上的一对公钥(host public key)及私钥(host private key)。
server key pair是指在每次SSH服务启动时,所随机产生的一对公钥(server public key)及私钥(server private key),且这个server key预设每小时会更换一次。
而SSH Server所回应给Client的public key,就是指host public key及server public key。
˙Client端比对host public key:
Client端对SSH Server所传送过来的host public key进行比对,如果与~/.ssh/known_hosts档案内容相符,则继续进行下一步,否则会询问您是否要接受这个key,此时输入yes就对了。
当使用者第一次与Server做连线时,由于之前并没有取得这个key,因此会询问您是否要接受Server所传来的host public key,那万一先前已做过连线,现在还是看到这个讯息,这就表示Server上的host public key与Client的known_hosts比对不符合的结果,比如像Server的SSH套件重新安装过后就会有这种情形发生。那万一您遇到的状况是在key比对不符后,直接拒绝您连线,这该怎么办呢?很简单,只要把Client的~/.ssh/目录下的known_hosts档删除后,再与Server做连线,以重新取得host public key就行了。
˙Client随机产生一个256 bit的乱数(session key):
当第三步骤通过后,Client随即产生这个乱数,并使用刚刚从Server那里所得到的那两把key来一起做加密,完成后就传回给Server。
˙Server使用private key来解密。
˙尔后就透过这session key来作对称式的加密使用。
˙Client端开始进行认证,通过后,SSH连线正式建立起来。
   
 SSH2加密技术
  
˙Client向SSH Server的22 port做出连线请求。
˙Server传送host public key给Client:
在SSH2里,sshd daemon启动时,并不会产生server key,所以只会传送host public key给Client。
˙Client端比对host public key:
与SSH1的做法相同,不再赘述。
˙使用Diffie-Hellman的演算法来产生session key,以作为连线加密使用。
˙Client端开始进行认证,通过后,SSH连线正式建立起来。

19.1.2需安装套件及检视套件内容

SSH所需套件

套件名称
简单描述
openssh
SSH Server的主要套件。

  SuSE预设就已经把此套件以及其相依套件都帮您装上了,所以这部分不用各位操心。

查询套件内容

suse:~ # rpm -ql openssh

/etc/init.d/sshd管理SSH服务的script。
/etc/pam.d/sshdsshd所使用的pam模组设定档。
/etc/ssh/sshd_configSSH Server的主要设定档。
/usr/bin/scp这是使用SSH协定于两台电脑间很安全的进行复制工作的指令。
/usr/bin/sftp当要下载或上传档案时,可使用这个工具来保障资料传输的安全性。
/usr/bin/sshSSH Client的远端连线工具。
/usr/bin/ssh-agent启用代理认证的工具。
/usr/bin/ssh-add

当您启用认证代理时,可利用此指令来帮您将private key登录至代理认证之中。

/usr/bin/ssh-keygen欲采取key认证时,需使用这支程式来产生一对key pair。
/usr/sbin/rcsshd连结至/etc/init.d/sshd的符号连结档。
/usr/sbin/sshd提供SSH服务的daemon。

19.1.3设定OpenSSH Server

在介绍设定档之前,先认识一下/etc/ssh 目录中的几个档案:

suse:/etc/ssh #ls
ssh_host_dsa_key ssh_host_key.pub sshd_config
ssh_host_dsa_key.pub ssh_host_rsa_key
ssh_host_key ssh_host_rsa_key.pub

针对以上几个档案做个简短说明:

sshd_config :SSH Server的主要设定档。

ssh_host_key、ssh_host_key.pub:ssh1的RSA private key及RSA public key。

ssh_host_rsa_key、ssh_host_rsa_key.pub:ssh2的RSA private key及RSA public key。

ssh_host_dsa_key、ssh_host_dsa_key.pub:ssh2的DSA private key及DSA public key。

设定sshd_config

接着就对SSH Server 的设定档做个大略的解说:

suse:/etc/ssh # vi sshd_config
#以下被注解起来的参数为系统的预设值。若要修改时,将注解拿掉并指定新的参数值即可。

# Port 22
# SSH预设所使用的port。

# Protocol 2,1
# 表示支援SSH1及SSH2。

# ListenAddress 0.0.0.0
# sshd所监听的介面位址。 预设是监听所有的介面位址。

# 以下的HostKey参数,是指定host private key所存放的档案。
# HostKey for protocol version 1
# HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
# HostKey /etc/ssh/ssh_host_rsa_key
# HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key
# KeyRegenerationInterval 1h
#SSH1预设每小时会重新产生一次server key。

# ServerKeyBits 768
# SSH 1预设所使用server key的长度为768 bits。

# SyslogFacility AUTH
# 指定SSH的讯息纪录是使用预设的AUTH这个facility。 至于其他可用者如
#DAEMON, USER, LOCAL0 ~ ​​LOCAL7 等。

# LoginGraceTime 2m
# 当使用者连上SSH Server后,若两分钟内无法认证成功,则会被断线。
#如设定成0,表无时间限制,另外时间单位未指定时,预设为秒。

# PermitRootLogin yes
# SSH Server预设是允许root登入的。 您可以考虑把它改成no。

# RSAAuthentication yes
# 是否允许使用SSH1的RSA认证。

# PubkeyAuthentication yes
# 是否允许使用SSH2的public key作认证。

# AuthorizedKeysFile .ssh/authorized_keys
# 当采用key认证时,于Client端所产生的public key,要存放在Server上的哪个档案内。

PasswordAuthentication no
# 是否要采用密码认证。 预设为yes。

UsePAM yes
# 是否使用PAM认证模组来进行认证工作。 预设为no。

DenyUsers user1 user2
# 设定拒绝登入的使用者名单。

SuSE 预设开机时会启动SSH 服务,所以设定档如有做任何的修改,请重新启动sshd:

suse:~ # rcsshd restart


19.1.4 SSH Client端常使用的连线工具

指令ssh 及putty 软体

这个ssh 指令是Linux Client 常使用的远端连线程式,至于putty 或pietty 则是windows 中较出名的连线工具。

 ssh for Linux:
  
Client:~ # ssh 192.168.1.111
Client:~ # ssh -l barry 192.168.1.111
Client:~ # ssh barry@192.168.1.111

以上的范例应该没问题才是。 如有所遗忘,请回到[ 11.3.3远端连线指令 ]去做个复习。
   
 putty for Windows:
  

想在Windows 中对Linux 的SSH Server 做远端连线,可至官方网站去下载putty 软体:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
在这个网页里,还可看到像pscp、psftp 等这一类的工具,视您需要而做选择啰。

当您将putty 下载回来后,请直接执行putty 程式,然后就会看到设定画面:


图一:putty设定主画面

接着请输入伺服器的位址及所使用协定,并于[Saved Sessions] 处填写个具代表性的名称,最后按下[Save] 来将设定纪录保留下来:


图二:设定SSH Server位址及使用协定

以下是选择性的调整。 首先调整putty 视窗大小:


图三:调整putty视窗大小

再来调整一下字型的部分,请先点选[Appearance],然后按下右边的[Change]:


图四:修改喜好设定

这里就视您需要做调整啰:


图五:调整使用字型及大小

修改完成后,请点选[Session] 来回到主画面,再按一次[Save] 把刚刚所做的修改保留下来:


图六:完成后之画面

就这么简单而已,自己试试看噢。


指令scp

想要在两主机之间很安全的执行复制的动作,就使用这个指令吧!

范例说明
范例一:将远端SSH Server上的/etc/passwd复制到本机/tmp目录下
client:~ # scp 192.168.1.111:/etc/passwd /tmp
Password: ←输入远端主机上root的密码。

范例二:将本机的/var/log目录复制到远端主机的/tmp/logdir中
client:~ # scp -r /var/log 192.168.1.111:/tmp/logdir
Password: ←输入远端主机上root的密码。
#这个范例中,如logdir已存在于远端主机上,那么会把log目录整个复制到logdir
#目录下,如logdir不存在,则会将log目录的内容复制到logdir中。

范例三:将远端主机tina家目录下的file,复制到本地端的/tmp目录中。
mary@client:~> scp tina@192.168.1.111:~/file /tmp
Password: ←输入远端主机上tina的密码。
#档案复制回来后,观察一下/tmp/file的拥有者可是mary噢。

范例四:将本机/tmp/file复制至远端主机的/tmp目录中。
mary@client:~> scp /tmp/file tina@192.168.1.111:/tmp
Password: ←输入远端主机上tina的密码。
#此时远端主机的/tmp/file,其拥有者为tina。

指令sftp

这是另一个可以使用的档案传输工具,与ftp 操作介面类似,不过其所传输的资料是会事先经过加密的噢。

范例说明
mary@client:~> sftp tina@192.168.1.111
Connecting to 192.168.1.111...
Password: ←输入远端主机上tina的密码。
sftp>
#这里的操作与传统的ftp差不多。 不清楚的话,可输入" ? "来了解有哪些指令可以利用,
#很容易的,自己练习看看。


19.1.5使用key来做认证

前面我们所介绍的SSH 连线过程,都是使用密码来做认证,而这一小节要介绍另一个更安全的做法,就是使用public key 认证。 先说明等一下key 认证的执行步骤:

 1.Client端的使用者mary,想以Server上barry的身分做远端连线。首先Client端的mary,先执行ssh-keygen指令,以产生一对RSA或DSA key pair (公钥及私钥)。
 2.Client端确认在/home/mary/.ssh/目录下,有产生一对public key及private key,顺便检视.ssh目录及此目录下的private key,其权限是否分别为700及600。
 3.再来将刚刚所产生的public key,存放至Server端/home/barry/.ssh/authorized_keys中。

步骤就那么简单,马上实做一次吧:

1. Client端先产生一对key pair:
mary@Client:~> ssh-keygen -t dsa
#使用ssh-keygen指令,来产生一对DSA key pair。
#如果想产生RSA key pair,请执行"ssh-keygen -t rsa"。
Generating public/private dsa key pair.
Enter file in which to save the key (/home/mary/.ssh/id_dsa):
# 上面括弧内所显示的是key预设所存放的位置。 请按下Enter键来继续。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
# 这是通关密语的设定,笔者这里就输入123456。
#等稍后整个key认证设定完成后,在做连线测试时,就会要求您输入通关密语。
# 如果此处未做设定,那等会儿的连线过程就不会要求您做输入了。
Your identification has been saved in /home/mary/.ssh/id_dsa.
Your public key has been saved in /home/mary/.ssh/id_dsa.pub.
The key fingerprint is:
c4:08:fd:70:8d:66:b0:dc:d4:ed:c1:0f:2f:09:3c:7f mary@Client

2.检查一下权限:
mary@Client:~> ls -ld .ssh .ssh/id_dsa
drwx------ 2 mary users 136 Nov 30 02:28.ssh
-rw------- 1 mary users 736 Nov 30 02:28 .ssh/id_dsa

3.将public key复制到Server上:
mary@Client:~/.ssh> scp id_dsa.pub barry@192.168.1.111:~/.ssh/authorized_keys
Password:
id_dsa.pub 100% 601 0.6KB/s 00:00
# 如远端主机的barry家目录中,尚无.ssh目录,请先建立起来后再执行这个步骤。


接着进行测试:

mary@Client:~>ssh barry@192.168.1.111
Enter passphrase for key '/home/mary/.ssh/id_dsa':←输入当初设定的通关密语。
Last login: Mon Dec 5 16:25:25 2006 from 192.168.1.130
barry@ suse :~>

好了,目前已经成功的使用public key 来做认证了。 不过在这个范例中,因为当初有设定通关密语的关系,所以在连线过程会要求您做输入。 如果现在希望能略过这个步骤,也就是不想输入通关密语而能直接连线,则需启用代理认证,详细做法如下:

mary@Client:~> ssh-agent bash
# 启用代理认证。

mary@Client:~> ssh-add
Enter passphrase for /home/mary/.ssh/id_dsa:←请输入通关密语。
Identity added: /home/mary/.ssh/id_dsa (/home/mary/.ssh/id_dsa)
# 将private key 加入代理认证之中。

# 完成后做个连线测试:
mary@Client:~> ssh barry@192.168.1.111
Last login: Mon Dec 5 18:00:13 2006 from 192.168.1.130
barry@suse:~>
# 注意到没,这次连线过程没有要求您输入通关密语。
#启用代理认证时,会进入到另一个shell (sub-shell)之中,因此当您要结束
#代理认证时, 即可执行exit指令,来退回原来的shell。

采用key 认证的做法就大致如此。 现在再出个状况,如果在Client 端又有另一个使用者tina,也想透过key 认证方式来以server 上barry 的身分做远端连线时该怎么做呢? 请参考以下的做法:

# 先产生RSA key pair:
tina@Client:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tina/.ssh/id_rsa):
Created directory '/home/tina/.ssh'.
Enter passphrase (empty for no passphrase):←这次不输入通关密语,直接按下Enter键。
Enter same passphrase again: ←按下Enter键。
Your identification has been saved in /home/tina/.ssh/id_rsa.
Your public key has been saved in /home/tina/.ssh/id_rsa.pub.
The key fingerprint is:
52:05:89:eb:b1:f6:95:c6:b5:bf:d4:f9:c1:73:a2:60 tina@Client

# 把rsa public key复制到server上barry的家目录里:
tina@Client:~> scp .ssh/id_rsa.pub barry@192.168.1.111:~
barry@192.168.1.111's password:
id_rsa.pub 100% 221 0.2KB/s 00:00

# 最后请在server主机上,将id_rsa.pub内容附加至authorized_keys档案中:
barry@suse:~> cat id_rsa.pub >> .ssh/authorized_keys
#这个地方千万不要把authorized_keys的原先内容覆盖掉,
#不然之前的使用者mary就无法做key认证了。


Client 端测试:

tina@Client:~> ssh barry@192.168.1.111
Last login: Tue Dec 6 15:23:49 2006 from 192.168.1.130
barry@suse:~>
# 注意到没?这次连线过程没有要求您输入通关密语噢,因为
#刚刚在建立RSA key pair的过程,根本就没有做设定啊。


19.2 VNC远端桌面遥控

19.2.1 VNC概述

VNC (Virtual Network Computing) 为一远端桌面遥控软体,是由AT&T 所开发的,并使用GPL 授权模式来对外发行,亦即其是一开放原始码的软体,任何人皆可免费自由取得。

VNC 最大特色是支援许多不同的操作平台,您可以将其安装在Windows、MacOS、Unix、Unix-Like 等等的作业系统上,并可在这些不同的作业系统间来相互操作。

VNC 软体可区分成两个部分,即VNC viewer ( 主控端) 跟VNC server ( 被控端),您只要在Sever 端安装VNC server 软体后,就可以于Client 端使用VNC viewer 软体来对其进行远端遥控。 另外即使Client 端没有安装VNC viewer 软体也没关系,因为Client 端也可以直接透过浏览器来进行远端桌面操控。

19.2.2安装所需软体

由于VNC 可以在相同或不同的作业系统间做远端遥控,因此等会儿我们就尝试看看如何在windows 及linux 间,相互使用VNC 来做远端操控啰。 不过于实作之前,请您先把在linux 及windows 上头所需安装的软体先搞定再说。

SuSE Linux 里已经同时包含了VNC server 及VNC viewer 软体,因此您不须额外下载。 至于所需套件为xorg-x11-Xvnc 及tightvnc,赶快检查看看吧!

至于windows 的话,请先至www.realvnc.com 下载VNC 软体,然后再进行安装。 详细步骤请参考以下。

下载VNC软体( for windows )

连上VNC网站,并点选[download it now]

点选[Download & use]

点选[Procceed to download]

下载for windows的免费VNC软体:

接受声明并下载:

将下载档案储存起来:

安装VNC

启动刚刚下载回来的执行程式来开始进行安装,步骤如下:


图一:VNC设定精灵画面


图二:接受授权同意声明


图三:VNC预设的安装位置画面


图四:选择安装项目


图五:设定存放VNC程式捷径之处


图六:执行额外工作的设定画面


图七:准备安装画面


图八:准备设定VNC Server的密码


图九:设定VNC Server密码画面

在图九中按下[OK] 后,会回到图八画面,此时点选[确定] 即可。


图十:重要讯息画面


图十一:VNC设定精灵完成画面

这样就安装完毕了,够简单吧。

19.2.3 Windows远端遥控Linux

这一小节主要是要介绍如何以Linux担任VNC server,并让Windows的Client端能对其进行远端操控,因此重点就放在Linux的设定上头啰。

设定Linux担任VNC server

 初次启动VNC server
  
suse:~ # vncserver

You will require a password to access your desktops.

Password: ←首次启动VNC server时,须设定提供给Client端做远端操控时,
Verify:     所需输入的密码。

Would you like to enter a view-only password (y/n)?n 请输入n
# 这是询问您,要不要设定一个只允许给Client端浏览而不能操控的密码。

New 'X' desktop is suselinux:1
#请留意结尾的数字1,此乃VNC所提供的X Server视窗编号。

Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/suselinux:1.log
   
 修改VNC预设要执行的Script
  
suse:~ # vi .vnc/xstartup
# !/bin/sh

xrdb $HOME/.Xresources
xsetroot -solid grey
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
gnome-session &
# 当桌面环境是gnome时,就把twm改成gnome-session即可
# 如是kde的话,就修改成startkde。
   
 重新启动VNC server
  
#先停止VNC server服务:
suse:~ # vncserver -kill :1
Killing Xvnc process ID 4453

# 再启动VNC Server:
suse:~ # vncserver

New 'X' desktop is suselinux:1

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/suselinux:1.log

#成功启动后,可顺便检查一下VNC所提供服务的port:
suse:~ # netstat -anp | egrep '5801|5901'
tcp 0 0 0.0.0.0:5801 0.0.0.0:* LISTEN 5889/Xvnc
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 5889/Xvnc

这样就完成了被控端的设定了。 而将来如果您想修改VNC server 上的连线密码,则请直接输入vncpasswd 指令去修改即可。

Windows远端操控Linux

这里会分别以安装在Windows上的VNC viewer软体及网页浏览器方式,来对Linux做远端操控。

 使用VNC viewer程式
  

如果您刚刚在Windows 上头安装VNC 软体时,是按照笔者的步骤进行的话,那么在您工作列上应该可以看到VNC viewer 这个应用程式的icon,请直接点选来执行,此时应该可以看到如下的画面:


图一:指定VNC viewer欲连线之主机

请将您Linux 主机位址填写进去吧,另外要注意到在位址后端需指定VNC 所提供的X Server 视窗编号噢。 没问题的话请点选[OK],接下来即会要求您输入当初在VNC Server 上所设定的密码:


图二:指定连线密码

这时候应该能顺利看到Linux 的视窗桌面了。 另外如果想开启多个视窗桌面,那么请点选图一底下的[options] 项目,并于[Misc] 中把[Shared connection] 选项打勾即可:


图三:设定能开启多视窗画面

而在此选项底下,还有个[Full-screen mode],这当然就是全萤幕模式啰﹔在您调整成Full-screen mode 后,如想调整回来,可按下F8 并选取[还原] 就行了。调整完毕,请把设定值保留起来:


图四:储存设定参数画面

Tips: 刚刚在linux上头是使用root的身分来设定VNC Server,所以在连线成功后,您所操控的可是root的桌面噢。 现在要是想换成一般user又如何呢?一样的步骤啦,只是在VNC server端须换成以一般使用者身分执行vncserver而已,其他步骤都相同噢。

   
 使用网页浏览器
  

如果您没安装VNC viewer 软体也没关系啦,直接于浏览器的网址处输入VNC server 的位址即可:

请留意网址后端的连接埠须指定5801 port,也就是把5800 port 加上您VNC server 所提供的X Server 视窗编号﹔如果当初VNC server 提供的视窗编号是2 的话,那这里就须指定5802 port。

   

19.2.4 Linux远端遥控Windows

假如您Windows上头的VNC server已启动,且也已设定好连线密码了,接着就可以在Linux上作测试啰。首先请您登入X-Window,开启一个terminal并执行vncviewer指令,然后输入server的IP及连线密码即可:

认证成功后,就可以开始远端操控Windows了噢。另外如果您是想使用浏览器做连线的话,请于URL上头输入: http://192.168.1.220:5800/,自己试试看吧!

不同作业系统间的VNC操作,大致是如此啦,简单吧!接着您可自行练习在两台同为Windows或Linux的主机上做VNC远端操控啰。


转自柏青哥的Suse Linux

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值