学习本章的必备技巧:
欢迎再次来到鸟哥的『碎碎念时间』!在这个章节当中,我们会介绍基本的 telnet 与 ssh 这两个远程联机的服务器软件!联机就联机嘛!为什么要有两个远程联机呢?这是因为 telnet 是较旧,而且是相当不安全的联机服务器,所以我们才要介绍 ssh 这一个较新而且较安全的服务器呀!那么在安装的过程当中,我们会使用到一些设定文件的修改,以及指令的下达,还有需要认识一下什么是 Super daemon ,所以,你最起码需要知道底下这些知识:
·
·
·
·
·
·
无论如何,将前面关于 与 的内容看完,会是很好的一件事情!
------------------------------------------------------------------------------------------------
远程联机程序的功能:
好了,在这个章节当中,首先,我们要先来了解一下,什么是『远程联机服务器』呀!?这个东西的功能为何呀!?我想,您应该已经听过,一个良好的网络环境当中,一部开放到 Internet 上面的服务器,基本上,他可以不需要显示卡、屏幕、键盘、鼠标等等的配备!只要有基本的主机板、CPU、RAM、硬盘再加上一块好一点的网络卡,并且连上 Internet !哈哈!那么你要操控这部主机的时候,只要透过网络联机进来,然后进行任何修改即可!嘿!所以啰,这个时候主机自然不需要接口设备啦!
以 VBird 为例,目前 VBird 管理大约七、八部左右的 Unix-Like 主机,这些主机都不在同一个地方,分布在南台湾各处!那么当有新的套件的漏洞被发布,或者是需要进行一些额外的设定的时候, VBird 人一定要到现场吗?当然不需要, VBird 只要透过网络联机到该主机上面,就可以进行任何工作了!真的就好象在屏幕前面工作一般的轻松愉快!^_^!这就是远程联机服务器啦!当然还不只这样的功能!举个例子来说:当您的工作需要使用到 Linux 的强大的编译功能时,那么您一定需要 Linux 对吧!而且最好是运算速度快一点的主机,这个时候你可以将你研究室最快的那一部主机开放出来,设定一下远程联机服务器,让你的学生啦,或者是研究室的同仁啦,可以透过这部机器帮他们进行研究的工作,这个时候,你的主机就可以让多人进行分享 Linux 运算的功能啦!
在早期的网络世界里,由于只有 Unix 机器,而且个人计算机还不流行的时候,想要使用大型主机来进行数值程序的运算时(在我们工程界,比较常使用 Fortran 这一类的程序语言,至于 C 语言则较少碰~),就需要向学校单位申请工作站的帐号,并且以远程联机程序连进主机,以使用 Unix 的资源来进行我们的数值模式运算!所以啦,那个远程联机服务器的设定,基本上,对于系统管理员是很重要的!尤其对于大型的工作站类型的 Unix-Like 主机,由于很多人都需要使用到他的 CPU 运算核心功能,或者是他的编译程序( compiler )来进行运算,这时的远程联机就更形重要啦!
· 服务器类型( Server )的联机程序:
在一般开放网际网络服务的服务器中,由于开放的服务可能会有较为重要的信息,而远程联机程序连进主机之后,可以进行的工作又太多了(几乎就像在主机前面工作一般!),因此网际网络的远程联机程序通常仅针对少部分系统维护者开放而已!除非必要,否则 Server 类型的主机还真的不建议开放联机的服务ㄋㄟ~
· 工作站类型( Workstation )的联机程序:
至于工作站的情况就跟服务器不太一样了!工作站常常仅针对内部的几个使用者开放而已,通常是不希望连上 Internet 的啦!而且所谓的工作站自然就是用来做工的!例如 VBird 的其中一部 Linux 就是专门用来进行大型的数值模式计算仿真之用!这个时候的远程联机服务器可能就得要对多人激活了!因为工作站的强大运算功能可以让很多人一同使用他的计算能力!而且也可以免除每部计算机都得要安装 compiler 的窘境!要知道,某些工程用的 compiler 是粉贵的~
· 远程联机服务器的主要类型:
目前最常见的远程联机服务器主要有以明码传送资料的 telnet 服务器,及以加密过的封包进行传送来联机的 ssh 服务器!虽然 telnet 可以支持的 client 端的软件比较多,不过由于他是使用明码来传送资料,很容易遭到有心人士的撷取!所以近来我们都呼吁大家多使用 ssh 这一种联机方式,而舍弃掉 telnet 这个比较不安全的咚咚啰!底下我们就分别来谈一谈这两种联机服务器吧!
------------------------------------------------------------------------------------------------
Telnet 服务器:
知道 telnet 是什么吗?咦!不就是连接 BBS 的工具吗?!嘿嘿!没错!他确实也是 BBS 软件类的挂上的一个服务器啦!不过这里我们暂不玩弄 BBS !因为 VBird 目前也还没有打算玩他!呵呵! telnet 可以说是历史相当悠久的远程联机服务器哩!而且支持他的软件也相当的多!例如知名的 netterm 就直接支持他啦!联机之后的界面也漂亮,在 client 端的中文传输与输入也没有问题!相当的不错用!不过,他最麻烦的地方就是.....比较不安全而已啦~
底下我们谈一谈怎么激活与使用 telnet 服务器吧!
· telnet 服务器:激活与关闭服务
还记得『』那个章节吧!?还记得 super daemon 呦!?没错啦,我们的 telnet 就是挂在底下的一支服务而已!那个咚咚就是有名的 xinetd 啰!( 注:在某些旧版的套件上面也有使用 inetd 的,激活的方式有点不太一样,不过差异不大啦!只要懂得基本的常识,那么就不会有问题啰!所以要多瞧一瞧 啦! ) 激活的方式就是 (1)将 xinetd 里面关于 telnet 的项目开启,然后 (2)重新激活一次 xinetd 就成功啦!那么如何开启 telnet 的项目呢?很简单,有两个方式,
1. 使用 ntsysv :
还记得 ntsysv 这个好用的东西吗?对了,在 Red Hat 底下有这么一个好用的设定工具,你可以使用 ntsysv 出现的窗口之中,将 telnet 勾选起来,然后按下 OK 离开即可啰! 2. 使用 vi 修改 /etc/xinetd.d/telnet 这个档案:
那么如果不是 Red Hat 的 Linux 系统呢?基本上, ntsysv 也只是修改 /etc/xinetd.d 这个目录下的资料而已,所以我们当然可以手动自己修改他啦!
看到了没!?只要将 disable (取消的意思) 变成 no ,也就是不取消,亦即是开启啦!
设定完开启之后,自然就是要激活啦,刚刚提到 telnet 是挂在 xinetd 底下的,所以自然只要重新激活 xinetd 就能够将 xinetd 里头的设定重新读进来,所以刚刚设定激活的 telnet 自然也就可以被激活啦!而激活的方式也有两种方式,其中 service 仅支持在 Red Hat 底下,所以通常我还是以 /etc/rc.d/init.d 底下的 scripts 为激活的主要方法啦!
那么要看有没有激活服务呢?怎么看?其实也很简单啦,还记得我们在 那一章吗?使用 netstat 就可以啦!
看到了吗?没错,那个 telnet 就是激活的项目啦!( 考一个问题,那个 port 对应的服务名称在哪一个档案里面查询到的呢?在每一个 Linux 系统都有的档案呦!忘记了呀!?看看 ,然后用 vi 去看看那一个档案的内容吧! ^_^ )那么要如何关闭呢?呵呵!那就真的是太简单啦!就将刚刚的步骤再做一次,而将设定值转变一下即可!步骤如下啦!
这样就关掉啦!很简单吧!
· telnet 客户端:好用的联机软件
刚刚上面提到的都是在服务器端的设定而已!那么在客户端有什么好用的软件可以连上 Server 的呢?最常见到的应该就是 netterm 这个鼎鼎大名的联机软件了吧!我想,只要玩过 BBS 的大概都晓得这个软件才对!所以这里就不提了!另外,目前几乎所有的操作系统都提供了 telnet 这个程序,这个程序可以直接轻易的就连上 telnet server 呢!例如您要在 Linux 上面连上自己的 telnet 服务器,可以这样做:
这样就联机进来啦!很简单吧!那么在 Windows 的环境底下呢?同样的,也是可以使用 telnet 的程序联机到 Linux 的 telnet server 里面来!没有问题的啦!可以依序这样做: 1. 按下 Windows 内的 『开始』
2. 选择 『执行』
3. 在出现的窗口中输入 『telnet your.IP.or.hostname』 这样就可以进入 Linux 的环境中了!很方便吧!
· telnet 安全性:iptables, TCP_Wrappers, 纯建议,
telnet 这个服务器方便归方便,但总是一个不太好的联机解决方案,因为毕竟他是一个以『明码』传输的协议,什么是『明码』呢?简单的说,当你使用 telnet 的时候,你总是会在屏幕上面输入资料吧!?最简单的例子,就是你总是要登入 telnet 的主机画面吧!那么你总是需要输入帐号与密码吧?当主机接受你的资料后才能进行确认!这个时候,你的资料就会经过 telnet 这个协议来传输到主机上面,这个传输时候的资料基本上是没有加密过的,也就是类似 ASCII 码的咚咚!如此一来的话,只要有心人士在某个 router 点去监听你的封包,而且将该资料封包捉下来,进行解读的工作,哈哈!那么你的帐号与密码就被拿走了!所以下一次,别人就可以利用你的帐号与密码了~很危险对不对~是很危险!除此之外, telnet 由于太老牌了,很多的骇客程序已经都写了破解的方式,所以激活之后,其实也很危险的啦!因此实在是建议不要启用 telnet 说!无论如何,有些朋友还是喜欢以 telnet 来联机,那么我们就提一些基本的注意事项好了! o root 不能直接以 telnet 连接上主机:
基本上,既然 telnet 不是很安全,自然预设的情况之下就是无法允许 root 以 telnet 登入 Linux 主机的!但是,事实上, telnet 只是利用 PAM 模块来管制 root 的登入而已,因此,如果你确定你的环境够安全(例如你的主机并没有连上 Internet ),并且想要开放 root 以 telnet 登入 Linux 主机的话,请修改 /etc/pam.d/login 这个档案的第二行设定即可:
如此一来, root 将可以直接进入 Linux 主机了!不过,还是不建议如此做的!
o 加上防火墙 iptables:
针对 telnet 加设防火墙 iptables 是一个好主意!如果您已经参考了 VBird 之前写的『』一文,并且使用里面的 scripts 的话,那么不用担心 telnet 啦!基本上,他原本就仅对内部开放 telnet ,外部是无法连上您的 telnet 的!但是,若是您自己设定了自己的防火墙机制之后,那么想要针对 192.168.0.0/24 这个网域,及 61.xxx.xxx.xxx 这个 IP 进行 telnet 的开放呢?可以增加这几行在您的 iptables 规则之内(请注意:防火墙的规则顺序是很重要的!所以再回头看看 简易防火墙架设 一文是有必要的!)
上面的规则中,第一、二行是针对来源的 IP 来开放 port 23 亦即是 telnet 的协议啦!而最后一行则是将其它的所有来源的,想要连上 telnet 的联机封包都丢掉的意思!怎么样!很简单吧!
o 加上防火墙 /etc/hosts.allow(deny) 机制:
防火墙的机制是越多越好!永远也不嫌多的啦!这里也可以使用 TCP_Wrappers 的机制呢!刚刚是开放了 192.168.0.0/24 这个网段,但是如果你只想要其中的 192.168.0.1 ~ 192.168.0.5 进入呢?而其它的 IP 只要一经联机,就会被记录该 IP ,以提供 root 查询呢?可以这样做:
更详细的 TCP_Wrappers 用法请参考 简易防火墙架设 一文啰!
o 建议事项:
说真的, telnet 真的不是很安全的!简直应该说为『危险』等级的服务,所以尽量不要激活他啦:
1. 非必要时,不要激活 telnet ,如果真的需要激活 telnet ,那么也请在激活并且使用完毕之后,立即将他关掉!
2. 如果确定真的要激活 telnet 时,请确定好限制的联机范围,使用 iptables 来设定联机的限制区域;
3. 加上 TCP_Wrappers 的辅助,加强防火墙的功能!
4. 随时注意登录档案里面关于 login 的事项!并且不要让 root 能以 telnet 登入 Linux 主机!
------------------------------------------------------------------------------------------------
SSH 服务器:
既然 telnet 不是很安全,那么我又需要以远程联机服务来操控我的 Linux 主机,那么应该怎么办呀!?最好的方法当然就是以较为安全的联机机制的方案来解决联机的问题啰!那么该如何解决这样的问题呢?这也不难啦,使用 SSH 即可。那么 SSH 是什么呢?他有什么特异功能?简单的来说,SSH 是 Secure SHell protocol 的简写,他可以经由将联机的封包加密的技术,来进行资料的传递,因此,资料当然就比较安全啰!这个 SSH 可以用来取代 Internet 上面较不安全的 finger, R Shell (rcp, rlogin, rsh 等指令), talk 及 telnet 等联机模式。底下我们将先简介一下 SSH 的联机模式,来说明为什么 SSH 会比较安全呢!
特别注意:这个 SSH 协议,在预设的状态中,本身就提供两个服务器功能:
1. 一个就是类似 telnet 的远程联机使用 shell 的服务器,亦即是俗称的 ssh ;
2. 另一个就是类似 FTP 服务的 sftp-server !提供更安全的 FTP 服务。
· 联机加密技术简介:
基本上,加密的技术通常是藉由所谓的『公钥与私钥』亦即『Public and Private keys』来进行加密与解密的动作!如下图所示,当 SSH 激活服务之后,会产生一支公钥,而身为个人计算机的你,在进行与 server 的联机时,可以藉由自己产生的私钥来提供 server 的联机之用,也可以直接藉由 server 提供的私钥来进行联机!这个与进行联机时选择的加密版本有关,这个等一下我们再提!
在上面的图标中,我们可以知道,当数据由 Server 端传送到 Client 端时,这些资料会先经过『公钥, Public Key』来进行加密的行为,所以,在传输的过程中,这些资料本身是经过加密的,因此,即使这些资料在途中被截取时,要破解这些加密的资料,还是得要花费上好长一段时间的。那么等这些经过公钥加密的资料传送到 Client 端之后,就可以藉由所谓的『私钥, Private Key』来进行解密的动作。需要注意的是,这些公钥与私钥在每一部计算机上面都不一样,所以,你与 Server 的联机对其他人来说,都是很难去破解的呢!那么这些公钥与私钥是如何产生的呢?底下我们来谈一谈目前 SSH 的两种版本的联机模式啰!
o SSH protocol version 1:
每一部主机都可以使用 RSA 加密方式来产生一个 1024-bit 的 RSA Key ,这个 RSA 的加密方式,主要就是用来产生公钥与私钥的演算方法!这个 version 1 的整个联机的加密步骤可以简单的这么看:
1. 当每次 SSH daemon (sshd) 激活时,就会产生一支 768-bit 的公钥(或称为 server key)存放在 Server 中;
2. 若有 client 端的需求传送来时,那么 Server 就会将这一支公钥传给 client ,而 Client 藉由比对本身的 RSA 加密方式来确认这一支公钥;
3. 在 Client 接受这个 768-bit 的 server key 之后,Client 自己也会随机产生一支 256-bit 的私钥(host key),并且以加密的方式将 server key 与 host key 整合成一支完整的 Key ,并且将这支 Key 也传送给 server ;
4. 之后,Server 与 Client 在这次的联机当中,就以这一支 1024-bit 的 Key 来进行资料的传递! 当然啦,因为 Client 端每次的 256-bit 的 Key 是随机取的,所以你这次的联机与下次的联机的 Key 就会不一样啦! o SSH protocol version 2:
与 version 1 不同的是,在 version 2 当中将不再产生 server key 了,所以,当 Client 端联机到 Server 端时,两者将藉由 Diffie-Hellman key 的演算方式来产生一个分享的 Key ,之后两者将藉由类似 Blowfish 的演算方式进行同步解密的动作!
每一个 sshd 都提供这两个版本的联机,而决定这两种模式联机的,就必需要在 client 端联机时选择联机的模式才能确认。目前预设情况下,会自动使用 version 2 的联机模式喔!而由于我们的联机资料中,经过了这个 Public 与 Private Key 的加密、解密动作,所以在中间的传送过程中,当然就比较安全的多啰!
------------------------------------------------------------------------------------------------
激活 ssh 服务:
事实上,在我们使用的 Linux 系统当中,预设就已经含有 SSH 的所有需要的套件了!这包含了可以产生密码等协议的 套件与 套件,所以呢,要激活 SSH 真的是太简单了!就直接给他激活就是了!此外,在目前的 Linux Distributions 当中,都是预设激活 SSH 的,所以一点都不麻烦,因为不用去设定,他就已经激活了!哇!真是爽快~无论如何,我们还是得说一说这个激活的方式吧!直接激活就是以 SSH daemon ,简称为 sshd 来激活的,所以,手动可以这样激活:
上面两种方式都可以直接手动激活 sshd 这个服务!然后使用 netstat -tl 看看能不能看到 ssh 的服务在监听呢!?如果出现了上面那一行黄色字体,就表示您的 SSH 已经正确的激活啰!这真是太简单了吧!没错,但是他就是这么简单~
那么我要如何在开机的时候就激活这个 sshd 呢?如果是 Red Hat 的系统,可以使用 ntsysv 这支程序,而 Mandrake 可以使用 chkconfig 这个程序!至于 OpenLinux 则可以到 /etc/sysconfig/daemons 去看看喔!
这个方式仅适合在已经有 OpenSSH 的 Linux Distributions 当中,如果以 Red Hat 6.x 为例,他并没有预设使用 SSH 怎么办?别担心,可以参考一下底下这个鸟哥之前写过的网页,有详细的说明使用 tarball 安装的步骤呢!
需要注意的是, SSH 不但提供了 shell 给我们使用,亦即是 ssh protocol 的主要目的,同时亦提供了一个较为安全的 FTP server ,亦即是 ssh-ftp server 给我们当成是 FTP 来使用!所以,这个 sshd 可以同时提供 shell 与 ftp 喔!而且都是架构在 port 22 上面的呢!所以,底下我们就来提一提,那么怎么样由 Client 端连接上 Server 端呢?同时,如何以 FTP 的服务来连接上 Server 并且使用 FTP 的功能呢?
------------------------------------------------------------------------------------------------
· ssh 客户端联机: ssh, putty
由于 Linux 与 Windows 这两个客户端的 Client 联机软件并不一样,所以我们分为两个部分来说明:
o Linux 客户端:
在 Linux 客户端方面,我们主要以 ssh 进行一般联机,而已 sftp 进行 FTP 的使用联机!分别简介如下:
这里请特别留意的是,如果直接以 ssh hostname 来连接进入 hostname 这个主机时,则进入 hostname 这个主机的『帐号名称』将会是目前你所在的这个环境当中的使用者帐号!以上面为例,因为我是以 root 的身份在执行,所以如果我执行了『 ssh host.domain.name 』时,那么对方 host.domain.name 这部主机,就会以 root 的身份来让我进行密码确认的登入动作!因此,为了避免这样的麻烦,通常我都是以简单的 e-mail 的写法来登入远方的主机,例如『ssh user@hostname 』即表示,我是以 user 这个帐号去登入 hostname 这部主机的意思。当然,也可以使用 -l username 这样的形式来书写!登入对方主机之后,其它的所有执行行为都跟在 Linux 主机内没有两样~所以,真的是很简单吧! ^_^ 这样就可以达到远程控管主机的目的了!此外,在预设的情况下, SSH 是『允许你以 root 的身份登入』喔!呵呵!更是爽快啦!此外,请特别留意的是,当您要连接到对方的主机时,如果是首次连接,那么 Server 会问你,你的联机的 Key 尚未被建立,要不要接受 Server 传来的 Key ,并建立起联机呢?呵呵!这个时候请『务必要输入 yes 而不是 y 或 Y』,这样程序才会接受喔!
那么如何使用 SSH FTP 的功能呢?也是很容易啦!就是使用 sftp 这支程序即可!而登入的方式与 ssh 相同,都是使用 sftp -l username hostname 或者直接以 sftp user@hosname 来书写!执行之后会有底下的模样:
进入到 sftp 之后,那就跟在一般 FTP 模式下的操作方法没有两样了!底下我们就来谈一谈, sftp 这个接口下的使用指令吧!
就整体而言, sftp 在 Linux 底下,如果不考虑图形接口,那么他已经可以取代 FTP 了呢!因为所有的功能都已经涵盖啦!因此,在不考虑到图形接口的 FTP 软件时,可以直接关掉 FTP 的服务,而改以 sftp-server 来提供 FTP 的服务吧! ^_^
o Windows 客户端:
在 Linux 底下已经有 ssh 了,那么如果在 Windows 底下呢?该怎么办?呵呵!这个可以直接使用 putty 这种类型的联机软件呢,他也是免费的软件喔!取得的方式可以参考底下的网站:
好了,那么要取得哪几个程序呢?其实只要 putty.exe 及 psftp.exe 这两支程序就够了!分别用来登录 shell 及 FTP 的呢!
o putty:
直接在 Windows 底下执行,执行的图标有点像底下这样:
这个时候请注意,由于我们比较喜欢将固定的几个主机的IP记录下来,所以在这里我们需要先进行一些基本的设定才行!在上图中,我们需要填写:
(1)HostName(or IP address) 那一项,及
(2)Saved Sessions 取个好记的名字,
(3)并且选择 SSH 那个选项才行!
以我的区域内网络为例,我可以写成这个模样:
请千万记得,填写完毕之后,一定要按下右边的『Save』按键,这样你的设定才会被记录下来喔!接着下来,我们要设定的是每次登入的时候,都会进行记录的项目,所以,你可以在左边的画面上面按下『Logging』然后将右边的『Always append to the end of it』,这样才不会每次登入的时候,系统都要问你一次,是否需要记录!
接着下来,我们还可以调整整个 putty 的屏幕大小呢!以下图为例,我设定我的登入画面为 40 行与 100 个字符!这样的画面比起传统的 24 * 80 要大的多,看起来也比较舒服就是了~那么那个 1000 表示我的滚动条有 1000 行的纪录,可以方便我往前查询呢!
调整完了屏幕的大小之后,再来这是最重要的:『你要以第几个 SSH version 进入?!』前面说过,我们预设是以 version2 来登入的,所以这里我们可以调整为 2 那个项目!这样每次登入都会以 version 2 的模式登入主机了!
好了,已经都设定完毕了,再来当然又是要记录啰!所以请回到『Session』的设定里面,再按下一次『Save』,这个时候在中间的大框框就会出现你输入的记录名称,然后,以后要登入 SSH 主机时,就直接给他点两下 test.linux.org 那个(就是你刚刚自行设定的纪录名称),就可以进入你所点选的主机啰!
整个 putty 大致上的流程就是这样!如此一来,您就可以在 Windows 上面以 SSH 的协议,登入远程的 Linux 主机噜!粉方便吧! ^_^ !如果还要其它的设定,那么就直接修改 Saved Sessions 与 HostName 这两个项目,然后再次给他 Save ,嘿嘿!就又多一个设定值了!而且还是跟刚刚的设定值相同!很容易设定的啦!
o psftp:
这一支程序的重点则是在于以 sftp 联机上 Server 。联机的方式可以直接点选 psftp 这个档案,让他直接激活,则会出现下面的图样:
这个时候可以填入你要连接上去的主机名称,例如我的区域内网络 test.linux.org 这个主机:
呵呵!这样就登入主机啦!很简单吧!然后其它的使用方式跟前面提到的 sftp 一样哩!加油的使用吧!
------------------------------------------------------------------------------------------------
详细设定 sshd 服务器
基本上,所有的 ssh 相关设定都放在 /etc/ssh/sshd_config 里面!不过,每个 Linux distribution 的预设设定都不太相同,所以我们有必要来了解一下整个设定值的意义为何才好!
基本上,在你的系统中,『除非有必要,否则请不要更改 /etc/ssh/sshd_config 这个档案的设定值!』因为预设的情况下通常都是最严密的 SSH 保护了,因此,可以不需要更动他!上面的说明仅是在让大家了解每个细项的一些基本内容而已!需要注意的是最后一项,如果您不愿意开放 SFTP 的话,将最后一行批注掉即可!
另外,如果你修改过上面这个档案(/etc/ssh/sshd_config),那么就必需要重新激活一次 sshd 这个 daemon 才行!亦即是: /etc/rc.d/init.d/sshd restart
------------------------------------------------------------------------------------------------
· 制作不用密码可立即登入的 ssh 用户:
咦!既然 SSH 可以使用 Key 来比对资料,并且提供使用者资料的加密功能,那么可不可能利用这个 Key 就提供使用者自己进入主机,而不需要输入密码呢?呵呵!好主意!我们可以将 Client 产生的 Key 给他拷贝到 Server 当中,所以,以后 Client 登入 Server 时,由于两者在 SSH 要联机的讯号传递中,就已经比对过 Key 了,因此,可以立即进入数据传输接口中,而不需要再输入密码呢!在实作上的步骤可以是:
1. 首先,先在 Client 上面建立 Public Key 跟 Private Key 这两把钥匙,利用的指令为 ssh-keygen 这个命令;
2. 再来,将 Private Key 放在 Client 上面的家目录,亦即 $HOME/.ssh/ ,并且修改权限为仅有该 User 可读的状态;
3. 最后,将那把 Public Key 放在任何一个你想要用来登入的主机的 Server 端的某 User 的家目录内之 .ssh/ 里面的认证档案即可完成整个程序。
说是好象很困难的样子,其实步骤真的很简单,我们依序来进行作业好了!
假设前提:
a. Server 部分为 test.linux.org 这部 192.168.0.2 的主机,欲使用的 User 为 test 这个帐号;
b. Client 部分为 test2.linux.org 这部 192.168.0.100 PC 的 test2 这个帐号,他要用来登入 192.168.0.2 这部主机的 test 这个帐号。
也就是说,我在 192.168.0.100 这部机器的身份为 test2 ,但是我想以 test 的身份登入 192.168.0.2 这部主机,并且希望不要使用密码!这样可以了解大前提了吗?好了,我们就一步一步来作吧!
1. 在 Client 端建立 Public 与 Private Key :
建立的方法真的是简单到不行!直接在 192.168.0.100 这个 Client 上面,以 test2 这个帐号,使用 ssh-keygen 这个指令来进行 Key 的产生即可!不过,需要注意的是, version 1 与 version 2 使用的密码演算方式不同,此外, version 2 提供两个密码演算的方法,我们这里仅针对 version 2 的 RSA 这个演算方法进行说明!
请注意上面喔,我的身份是 test2 ,所以当我执行 ssh-keygen 时,才会在我的家目录底下的 .ssh/ 这个目录里面产生所需要的两把 Keys ,分别是私钥(id_rsa)与公钥(id_rsa.pub)。另外一个要特别注意的就是那个 id_rsa 的档案权限啦!他必须要是 -rw------- 才好!否则内容被人家知道了,那么你的 Keys 不就有可能外泄了?所以请特别留意他的权限喔!那么那个 id_rsa.pub 则是『公钥!』这个档案必须要被放置到 Server 端才行! 2. 在 Client 端放置私钥:
在预设的条件中,我们的私钥必需要放置在家目录底下的 .ssh 里面,那么如果是 version 2 的 RSA 算法,就需要放置在 $HOME/.ssh/id_rsa 当中!咦!刚好使用 ssh-keygen 就是已经产生在这个目录下了,所以自然就不需要去调整他了!以我的 test2.linux.org 来看,那么我的档案就会放置在 /home/test2/.ssh/id_rsa 这个档案就是私钥啦! 3. 在 Server 端放置可以登入的公钥:
既然我们要让 test2 可以以 test 这个帐号登入 test.linux.org 这部主机,那么这部主机自然需要保有 test2 的 public key 啰!对的!所以我们必需要将 Client 端建立的 id_rsa.pub 档案给他拷贝到 test.linux.org 里头的 test 这个使用者的家目录之下!那么如果你还记得上面的 sshd_config 这个档案的设定的话,那么应该就记得『AuthorizedKeysFile』这个设定吧!是的!在被登入的主机的某个帐号,他的公钥放置的文件名称预设就是这个项目所记载的!而他预设的档名就是 authorized_keys 这个文件名称啦!那么应该怎么做呢?
请注意上面的机器!由于 authorized_keys 可以保存相当多的公钥内容,因此,可以使用 >> 的方式来将 Client 端的公钥新增到该档案内!呵呵!做完这一步一后,未来 test2 就可以直接在 test2.linux.org 以
这样就可以不需要输入密码啰!但是请注意, test 不能以 test2 登入 test2.linux.org 喔!
很简单的步骤吧!这样一来,就可以不需密码的手续了!无论如何,你要记得的是, Server 需要有的是 Public Keys ,而 Client 端的则是 Private Keys !则未来,当你还想要登入其它的主机时,只要将你的 public key ( 就是 id_rsa.pub 这个档案 )给他 copy 到其它主机上面去,并且新增到某帐号的 .ssh/authorized_keys 这个档案中!哈哈!成功!
------------------------------------------------------------------------------------------------
· 安全设定:
好了,那么关于安全的设定方面,有没有什么值得注意的呢?当然是有啦!我们可以先建议几个项目吧!分别可以由:
o /etc/ssh/sshd_config
o /etc/hosts.allow, /etc/hosts.deny
o iptables
这三方面来着手进行!底下我们就说一说吧!
· /etc/ssh/sshd_config
一般而言,这个档案的预设项目就已经很完备了!所以,事实上是不太需要更动他的!但是,如果您有些使用者方面的顾虑,那么可以这样修正一些问题呢!
o 禁止 root 的登入:任何时候,不许 root 以远程联机的方式登入,都会是一个好主意!所以这里蛮建议大家直接将 root 的登入权限拿掉吧!所以,可以修改 /etc/ssh/sshd_config 这个档案的内容为:
如此一来,以后 root 就不能以 ssh 登入啰!这样还是比较好的啦! ^_^ o 不许某个群组登入:有些特殊情况中,我们想要让使用者只能使用 sendmail, pop3, ftp 等,但是不希望他可以远程联机进来,那么你可以这样做:
1. 将这些使用者都归纳在某一个特殊群组之下,例如 nossh 这个群组好了;
2. 在 /etc/ssh/sshd_config 当中加入这一行:『DenyGroups nossh』
3. 重新激活 sshd : /etc/rc.d/init.d/sshd restart 这样就OK啦! o 不许某个使用者登入:跟 DenyGroups 类似,使用 DenyUsers 即可!参考 的设定喔!
· /etc/hosts.allow 及 /etc/hosts.deny :
这东西也是很简单的啦!直接参考: 简易防火墙架设 一文啰!当然,简单的方法就是:
· iptables
多几层保护也很好的!所以也可以使用 iptables 喔!参考: 一文啰!
基本上, SSH 还蛮安全的,只要取消 root 的登入权限,那么问题应该就会比较小一点啦!所以,虽然可以不用设定 iptables ,但是建议针对几个网域设定一下 /etc/hosts.allow 与 /etc/hosts.deny !加油啰!
|