|
最近更新日期:2003年09月09日
远程联机程序的功能: Telnet 服务器: telnet 服务器:安装、启动与关闭服务 telnet 客户端:好用的联机软件 telnet 安全性:iptables, TCP_Wrappers, 纯建议, SSH 服务器: 联机加密技术简介: 启动 ssh 服务: ssh 客户端联机: ssh, sftp, putty, 详细设定 sshd 服务器:/etc/ssh/sshd_config 制作不用密码可立即登入的 ssh 用户: ssh-keygen, 安全设定: sshd_config, iptables, TCP_Wrappers, 参考资源 课后练习 大标题的图示远程联机程序的功能:
以鸟哥个人为例,目前鸟哥管理大约七、八部左右的 Unix-Like 主机,这些主机都不在同一个地方,分布在南台湾各处!那么当有新的套件的漏洞被发布,或者是需要进行一些额外的设定的时候, 是否鸟哥本人一定要到现场吗?当然不需要, 只要透过网络联机到该主机上面,就可以进行任何工作了!真的就好像在屏幕前面工作一般的轻松愉快!^_^!这就是远程联机服务器啦!远程联机服务器的功能 当然还不只如此!举个例子来说:当您的工作需要使用到 Linux 的强大的编译功能时,那么您一定需要 Linux 对吧!而且最好是指令周期快一点的主机,这个时候您可以将您研究室最快的那一部主机开放出来,设定一下远程联机服务器,让您的学生啦,或者是研究室的同仁 啦,可以透过这部机器帮他们进行研究的工作,这个时候,您的主机就可以让多人进行分享 Linux 运算的功能啦! 在早期的网络世界里,由于只有 Unix 机器,而且个人计算机还不流行的时候,想要使用大型主机来进行数值程序的运算时(在我们工程界,比较常使用 Fortran 这一类的程序语言,至于 C 语言则较少碰〜),就需要向学校单位申请工作站的账号,并且以远程联机程序连进主机,以使用 Unix 的资源来进行我们的数值模式运算!所以啦,那个远程联机服务器的设定,基本上,对于系统管理员是很重要的!尤其对于大型的工作站类型的 Unix-Like 主机,由于很多人都需要使用到他的 CPU 运算核心功能,或者是他的编译程序( compiler )来进行运算,这时的远程联机就更形重要啦! 那么是否每一部连上 Internet 上面的主机都应该要开放远程联机的功能呢?其实并不尽然,还是需要针对您的主机来进行规划的,我们底下分服务器与工作站来说明: 在一般开放因特网服务的服务器中,由于开放的服务可能会有较为重要的信息,而远程联机程序连进主机之后,可以进行的工作又太多了(几乎就像在主机前面工作一般!),因此因特网的远程联机程序通常仅针对少部分系统维护者开放而已!除非必要,否则 Server 类型的主机还真的不建议开放联机的服务呢!以鸟哥为例,我的主机提供了我们研究室使用 Mail 与 Internet 上面的 WWW 服务,如果还主动提供远程联机的话,那么万一不小心被入侵,那可就伤脑筋了!因此,鸟哥仅开放『很小部分的网域』让系统管理员连进来,其他来源的 IP 一律抵挡!不许使用远程联机的功能呢! 至于工作站的情况就跟服务器不太一样了!工作站常常仅针对内部的几个使用者开放而已,通常是不希望连上 Internet 的啦!而且所谓的工作站自然就是用来做工的!例如鸟哥的其中一部 Linux 就是专门用来进行大型的数值模式计算仿真之用!这个时候的远程联机服务器可能就得要对多人启动了!因为工作站的强大运算功能可以让很多人一同使用他的计算能力!而且也可以免除每部计算机都得要安装 compiler 的窘境!要知道,某些工程用的 compiler 是粉贵的〜 好了,那么什么是『明码』呢?为什么 telnet 使用明码就比较不安全?所谓的明码就是:当我们的数据封包在网络上流窜时,该数据封包的内容为数据的原始格式,例如我们在 telnet 下达的指令与密码等等,都会以类似 ASCII 的格式传送到主机端,而主机端就藉由这些数据来下达指令。好了,想一想,如果这些数据封包在经过某些 broadcast 或者是 Router 时,被有心人士捉去,那么他将会完整的取得您的数据喔!所以啦,万一您的数据封包里面含有信用卡数据、密码、身份确认等重要信息时,是否很危险吶?!因 此,目前我们通常都希望使用可以将这些在网络上面跑的数据加密的技术,以增加数据在 Internet 上面传送的安全性啊! 大标题的图示Telnet 服务器:
底下我们谈一谈怎么启动与使用 telnet 服务器吧! telnet 服务器:安装、启动与关闭服务 安装: 如何启用 Telnet 这个好用的服务器呢?首先,当然一定要有安装啰!由于近年来由于 telnet 是以明码在传输的问题,所以在新的 Linux 版本上面,已经都将 telnet 这个服务器排除在『先发名单』之外啦,也就是说,很多 Linux distributions 预设是不安装 telnet 的,不过,在每个主要的 Linux distributions 还是有提供 telnet 套件在光盘当中啦!所以您要拿出原版光盘,并且安装好他,就可以啦!如何确认是否已经安装了 telnet 呢?最简单的方法就是使用最广泛被使用的 RPM 啦! [root@test
root]# rpm -qa | grep telnet
telnet-server-krb5-1.2.5-1mdk telnet-client-krb5-1.2.5-1mdk # 上面是 Mandrake 9.0 的范例;或底下是 Red Hat 7.2 的范例 telnet-0.17-20 telnet-server-0.17-20 需要特别留意的是,如果要提供 telnet 联机服务,通常需要安装两个 RPM 喔: 所以,如果您的系统上面找不到等一下要设定的 telnet 配置文件,肯定就是没有安装 telnet 啦!请拿出您的光盘片,然后 mount 之后,赶紧的安装他吧!否则就无法进行下一步的设定啦! ^_^ 启动与关闭: 还记得『鸟哥的 Linux 私房菜 -- 基础学习篇』里面的『认识服务 ( daemon )』那个章节吧!?要记得 super daemon 呦!?没错啦,我们的 telnet 就是挂在 super daemon 底下的一支服务而已!那个咚咚就是有名的 xinetd 啰!( 注:在某些旧版的套件上面也有使用 inetd 的,启动的方式有点不太一样,不过差异不大啦!只要懂得基本的常识,那么就不会有问题啰!所以鸟哥才会要大家先读完 Linux 基础篇 啦! ) 启动的方式就是:
(2)重新启动一次 xinetd 就成功啦! 那么如何开启 telnet 的项目呢?很简单,有两个方式: 还记得小红帽 ( Red Hat ) 里面的 ntsysv 这个好用的东西吗?对了,在 Red Hat 底下有这么一个好用的设定工具,您可以使用 ntsysv 出现的窗口之中,将 telnet 勾选起来,然后按下 OK 离开即可啰! 那么如果不是 Red Hat 的 Linux 系统呢?基本上, ntsysv 也只是修改 /etc/xinetd.d 这个目录下的数据而已,所以我们当然可以手动自己修改他啦! [root@test
root]# vi /etc/xinetd.d/telnet
看到了没!?只要将 disable (取消的意思) 变成 no ,也就是不取消,亦即是开启啦!# default: on # description: The telnet server serves telnet sessions; it uses \ # unencrypted username/password pairs for authentication. service telnet { disable = yes<==就是改这里,将 yes 改成 no 即可! flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID } 设定完开启之后,自然就是要启动啦,刚刚提到 telnet 是挂在 xinetd 底下的,所以自然只要重新启动 xinetd 就能够将 xinetd 里头的设定重新读进来,所以刚刚设定启动的 telnet 自然也就可以被启动啦!而启动的方式也有两种方式,其中 service 这个指令仅支持在 Red Hat 与 Mandrake 底下,所以通常我还是以 /etc/rc.d/init.d 底下的 scripts 为启动的主要方法啦! 方法一:仅支援
Red Hat 或 Mandrake 系统:
[root@test root]# service xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] 方法二:正统的启动方式:
[root@test
root]# netstat -tl
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:telnet *:* LISTEN step 1: 修改一下
/etc/xinetd.d/telnet 档案:
[root@test root]# vi /etc/xinetd.d/telnet # default: on # description: The telnet server serves telnet sessions; it uses \ # unencrypted username/password pairs for authentication. service telnet { disable = no<==就是改这里,将 no 改成 yes 即可! flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID } step 2: 重新启动
xinet 即可:
telnet 客户端:好用的联机软件 刚刚上面提到的都是在服务器端的设定而已!那么在客户端有什么好用的软件可以连上 Server 的呢?最常见到的应该就是 netterm 这个鼎鼎大名的联机软件了吧!我想,只要玩过 BBS 的大概都晓得这个软件才对!所以这里就不提了!另外,目前几乎所有的操作系统都提供了 telnet 这个程序,这个程序可以直接轻易的就连上 telnet server 呢!例如您要在 Linux 上面连上自己的 telnet 服务器,可以这样做: [root@test
root]# telnet localhost
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Red Hat Linux release 7.2 (Enigma) Kernel 2.4.18 on an i586 login: test <==输入账号 Password: <==输入密码请注意!密码并不会在屏幕上面显示任何的字眼 Last login: Thu Oct 3 11:59:29 from test_inside <==提示上次登入的地址 You have new mail. <==自上次登入以来,是否信箱内有新信件!? [test@test test]$ <==这里就进入了 telnet 的联机程序当中了! [test@test test]$ exit <==离开这次 telnet 的登入! 这样就可以进入 Linux 的环境中了!很方便吧!当然啦!您也可以使用类似 netterm 这个很棒的联机软件来联机的,这里我们就不示范啦!那如果想要在 Linux 的终端机看到中文呢?!呵呵!这就需要 JMCCE 这个套件的支持了!请参考:Linux 常用指令介绍之终端机中文接口显示。 telnet 安全性:iptables, TCP_Wrappers, 纯建议, telnet 这个服务器方便归方便,但总是一个不太好的联机解决方案,因为毕竟他是一个以『明码』传输的协议,什么是『明码』呢?简单的说,当您使用 telnet 的时候,您总是会在屏幕上面输入数据吧!?最简单的例子,就是您总是要登入 telnet 的主机画面吧!那么您总是需要输入账号与密码吧?当主机接受您的数据后才能进行确认!这个时候,您的资料就会经过 telnet 这个协议来传输到主机上面,这个传输时候的数据基本上是没有加密过的,也就是类似 ASCII 码的咚咚!如此一来的话,只要有心人士在某个 router 点去监听您的封包,而且将该数据封包捉下来,进行解读的工作,哈哈!那么您的账号与密码就被拿走了!所以下一次,别人就可以利用您的账号与密码了〜很危险对不对〜是很危险!除此之外, telnet 由于太老牌了,很多的黑客程序已经都写了破解的方式,所以启动之后,其实也很危险的啦!因此实在是建议不要启用 telnet 说!无论如何,有些朋友由于旧软件的关系,还是需要使用到 telnet 来联机,那么我们就提一些基本的注意事项好了! 事实上, xinetd 这个 super daemon 提供的些许的保护措施了,您可以针对您的主机的多重接口(有对内以及对外喔!)来提供不同保护等级的措施!底下列出一个范例,不过,更多的信息请再回到『鸟哥的 Linux 私房菜 -- 基础学习篇』当中去查阅一下『认识服务 』那一章里面的详细设定说明吧! [root@test
root]# vi /etc/xinetd.d/telnet
# This file had been modified by VBird 2002年11月04日 # First is about inside the network service telnet { disable = no bind = 192.168.1.2 only_from = 192.168.1.0/24 # 上面这两行说明仅提供内部网域! instance = UNLIMITED nice = 0 flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/telnetd server_args = -a none log_on_failure += USERID } # Second is
about the outside domain's settings
既然 telnet 不是很安全,自然预设的情况之下就是无法允许 root 以 telnet 登入 Linux 主机的!但是,事实上, telnet 只是利用一些较为安全的机制来防止 root 登入而已〜所以啰,假如您确定您的环境够安全(例如您的主机并没有连上 Internet ),并且想要开放 root 以 telnet 登入 Linux 主机的话,请直接将 /etc/securetty 更改檔名即可! [root@test
root]# mv /etc/securetty /etc/securetty.bak
这样一来,root 就可以登入啦!不过,相当的不建议这样做喔!毕竟不是很安全啦!此外,您也可以藉由修改
pam 模块来达成同样的功能!修改 /etc/pam.d/login 这个档案的第二行设定即可:
[root @test
/root]# vi /etc/pam.d/login
如此一来, root 将可以直接进入 Linux 主机了!不过,还是不建议如此做的!
#%PAM-1.0 #auth required /lib/security/pam_securetty.so # 将上面这一行加上 # 批注掉! auth required /lib/security/pam_stack.so service=system-auth auth required /lib/security/pam_nologin.so account required /lib/security/pam_stack.so service=system-auth password required /lib/security/pam_stack.so service=system-auth session required /lib/security/pam_stack.so service=system-auth session optional /lib/security/pam_console.so 针对 telnet 加设防火墙 iptables 是一个好主意!如果您已经参考了前面章节提到的『简易防火墙架设』一文,并且使用里面的 scripts 的话,那么不用担心 telnet 啦!基本上,他原本就仅对内部开放 telnet ,外部是无法连上您的 telnet 的!但是,若是您自己设定了自己的防火墙机制之后,那么想要针对 192.168.0.0/24 这个网域,及 61.xxx.xxx.xxx 这个 IP 进行 telnet 的开放呢?可以增加这几行在您的 iptables 规则之内(请注意:防火墙的规则顺序是很重要的!所以再回头看看 简易防火墙架设 一文是有必要的!) /sbin/iptables
-A INPUT -p tcp -i eth0 -s 192.168.0.0/24 --dport 23 -j ACCEPT
上面的规则中,第一、二行是针对来源的 IP 来开放 port 23 亦即是 telnet 的协议啦!而最后一行则是将其他的所有来源的,想要连上
telnet 的联机封包都丢掉的意思!怎么样!很简单吧!
/sbin/iptables -A INPUT -p tcp -i eth0 -s 61.xxx.xxx.xxx --dport 23 -j ACCEPT /sbin/iptables -A INPUT -p tcp -i eth0 --dport 23 -j DROP 防火墙的机制是越多越好!永远也不嫌多的啦!这里也可以使用 TCP_Wrappers 的机制呢!刚刚是开放了 192.168.0.0/24 这个网段,但是如果您只想要其中的 192.168.0.1 ~ 192.168.0.5 进入呢?而其他的 IP 只要一经联机,就会被记录该 IP ,以提供 root 查询呢?可以这样做: [root@test
root]# vi /etc/hosts.allow
更详细的 TCP_Wrappers 用法请参考 简易防火墙架设
一文啰!
in.telnetd: 192.168.0.1, 192.168.0.2, 192.168.0.3, 192.168.0.4, 192.168.0.5: allow [root@test root]#
vi
/etc/hosts.deny
说真的, telnet 真的不是很安全的!简直应该说为『危险』等级的服务,所以尽量不要启动他啦: 大标题的图示ssh 服务器:
特别注意:这个 SSH 协议,在预设的状态中,本身就提供两个服务器功能: 联机加密技术简介: 基本上,加密的技术通常是藉由所谓的『一对公钥与私钥』亦即『Public and Private keys』来进行加密与解密的动作!如下图所示,当 SSH 服务器主机启动该服务之后,主机端会产生一支公钥,而身为个人计算机的您 ( client 端 ),在进行与 server 的联机时,可以藉由 Client 端随机自行产生的私钥来提供 server 的联机之用,也可以直接藉由 server 提供的私钥来进行联机!这个与进行联机时选择的加密版本有关,等一下我们再提! 在上面的图示中,我们可以知道,当资料由 Server 端传送到 Client 端时,这些数据会先经过『公钥, Public Key』来进行加密的行为,所以,在传输的过程中,这些数据本身是经过加密的,因此,即使这些数据在途中被截取时,要破解这些加密的数据,还是得要花费上好长一段时间的。那么等这些经过公钥加密的数据传送到 Client 端之后,就可以藉由所谓的『私钥, Private Key』来进行解密的动作。需要注意的是,这些公钥与私钥在每一部计算机上面都不一样,所以,您与 Server 的联机对其他人来说,都是很难去破解的呢!那么这些公钥与私钥是如何产生的呢?底下我们来谈一谈目前 SSH 的两种版本的联机模式啰!
每一部主机都可以使用 RSA 加密方式来产生一个 1024-bit 的 RSA Key ,这个 RSA 的加密方式,主要就是用来产生公钥与私钥的演算方法!这个 version 1 的整个联机的加密步骤可以简单的这么看: 与 version 1 不同的是,在 version 2 当中将不再产生 server key 了,所以,当 Client 端联机到 Server 端时,两者将藉由 Diffie-Hellman key 的演算方式来产生一个分享的 Key ,之后两者将藉由类似 Blowfish 的演算方式进行同步解密的动作! 每一个 sshd 都提供这两个版本的联机,而决定这两种模式联机的,就必需要在 client 端联机时选择联机的模式才能确认。目前预设情况下,会自动使用 version 2 的联机模式喔!而由于我们的联机数据中,经过了这个 Public 与 Private Key 的加密、解密动作,所以在中间的传送过程中,当然就比较安全的多啰!(注:目前使用 SSH 来联机时,比较建议使用 version 2 的算法喔!) 启动 ssh 服务: 事实上,在我们使用的 Linux 系统当中,默认就已经含有 SSH 的所有需要的套件了!这包含了可以产生密码等协议的 OpenSSL 套件与 OpenSSH 套件,所以呢,要启动 SSH 真的是太简单了!就直接给他启动就是了!此外,在目前的 Linux Distributions 当中,都是预设启动 SSH 的,所以一点都不麻烦,因为不用去设定,他就已经启动了!哇!真是爽快〜无论如何,我们还是得说一说这个启动的方式吧!直接启动就是以 SSH daemon ,简称为 sshd 来启动的,所以,手动可以这样启动: [root@test
root]# /etc/rc.d/init.d/sshd start
[root@test root]# service sshd start [root@test root]# netstat -tl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN 上面两种方式都可以直接手动启动 sshd 这个服务!然后使用 netstat -tl 看看能不能看到 ssh 的服务在监听呢!?如果出现了上面那一行斜体字,就表示您的 SSH 已经正确的启动啰!这真是太简单了吧!没错,但是他就是这么简单〜 那么我要如何在开机的时候就启动这个 sshd 呢?如果是 Red Hat 的系统,可以使用 ntsysv 这支程序,而 Mandrake 可以使用 chkconfig 这个程序!至于 OpenLinux 则可以到 /etc/sysconfig/daemons 去看看喔! 这个方式仅适合在已经有 OpenSSH 的 Linux Distributions 当中,如果以 Red Hat 6.x 为例,他并没有预设使用 SSH 怎么办?别担心,可以参考一下底下这个鸟哥之前写过的网页,有详细的说明使用 tarball 安装的步骤呢!
(http://linux.vbird.org/linux_server/0310telnetssh/0310telnetssh-2.php)
ssh 客户端联机: 由于 Linux 与 Windows 这两个客户端的 Client 联机软件并不一样,所以我们分为两个部分来说明:
在 Linux 客户端方面,我们主要以 ssh 进行一般联机,而以 sftp 进行 FTP 的使用联机!分别简介如下: ssh
一般联机的使用方式:
[root@test root]# ssh user@hostname [root@test root]# ssh -l test test.linux.org Connecting to test.linux.org... The authenticity of host 'test.linux.org (192.168.1.100)' can't be established. RSA key fingerprint is 46:cf:06:6a:ad:ba:e2:85:cc:d9:c4:8d:15:bb:f3:ec. Are you sure you want to continue connecting (yes/no)? yes <==请输入 yes ! Warning: Permanently added 'test.linux.org,192.168.1.100' (RSA) to the list of known hosts. test@test.linux.org's password: <==请输入 test 这个用户的密码! 这里请特别留意的是,如果直接以『 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 这支程序默认会将主机端的 public key 记录下来,放置在 /home/youraccount/.ssh/known_hosts 当中,以利未来的联机之用。不过,由我们刚刚对于联机加密机制的探讨当中,可以发现在 SSH 主机重新启动之后,那个 Public Key 会自动的更新,所以,当您的 SSH 主机经过重新启动,而您的 Client 再以 ssh 这支程序联机时,就会发现如下的错误喔: [root@test
root]# ssh user@hostname
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 6e:1a:60:d0:ee:d0:7c:91:df:94:de:09:35:7b:08:ba. Please contact your system administrator. Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending key in /root/.ssh/known_hosts:8 RSA host key for hostname has changed and you have requested strict checking. Host key verification failed. 这个错误讯息在告诉您,上次所登录的远程 SSH 主机的 Keys 已经被改过了(最可能的原因就是重新启动啦!),所以无法继续登入〜呵呵!这个时候怎么办?很简单啊!进入您的家目录的 ~/.ssh 里面,编辑一下 known_hosts ,将欲连接的主机名的 Key 给他消除,就可以重新联机啦! 那么如何使用 SSH FTP 的功能呢?也是很容易啦!就是使用 sftp 这支程序即可!而登入的方式与 ssh 相同,都是使用 sftp -l username hostname 或者直接以 sftp user@hosname 来书写!执行之后会有底下的模样: sftp 一般联机的使用方式:
[root@test root]# sftp test@test.linux.org test@test.linux.org's password: <==请输入 test 这个用户的密码! sftp> <==等待您输入指令! 进入到 sftp 之后,那就跟在一般 FTP 模式下的操作方法没有两样了!底下我们就来谈一谈, sftp 这个接口下的使用指令吧! 针对远方主机(Server)之行为
变换目录到 /etc/test 或其他目录
cd /etc/test
cd PATH 列出目前所在目录下的档案或目录
ls
dir 建立目录
mkdir directory
删除目录
rmdir directory
显示目前所在的目录
pwd
更改档案或目录群组
chgrp groupname PATH
更改档案或目录拥有者
chown username PATH
更改档案或目录的权限
chmod 644 PATH
其中,644 与权限有关!回去看基础篇! 建立连结档
ln oldname newname
删除档案或目录
rm PATH
更改档案或目录名称
rename oldname newname
离开远程主机
exit
bye 针对本机(Client)之行为(都加上
l, L 的小写 )
变换目录到本机的 PATH 当中
lcd PATH
列出目前本机所在目录下的文件名
lls
在本机建立目录
lmkdir
显示目前所在的本机目录
lpwd
文件传输
将档案由本机上传到远程主机
put [本机目录或档案] [远程]
put [本机目录或档案] 如果是这种格式,则档案会放置到目前远程主机的目录下! 将档案由远程主机下载回来
get [远程主机目录或档案] [本机]
get [远程主机目录或档案] 若是这种格式,则档案会放置在目前本机所在的目录当中!可以使用通配符,例如: get * get *.rpm 亦是可以的格式! 就整体而言, sftp 在 Linux 底下,如果不考虑图形接口,那么他已经可以取代 FTP 了呢!因为所有的功能都已经涵盖啦!因此,在不考虑到图形接口的 FTP 软件时,可以直接关掉 FTP 的服务,而改以 sftp-server 来提供 FTP 的服务吧! ^_^
在 Linux 底下已经有 ssh 了,那么如果在 Windows 底下呢?该怎么办?呵呵!这个可以直接使用 putty 这种类型的联机软件呢,他也是免费的软件喔!取得的方式可以参考底下的网站:
直接在 Windows 底下执行,执行的图示有点像底下这样: 这个时候请注意,由于我们比较喜欢将固定的几个主机的IP记录下来,所以在这里我们需要先进行一些基本的设定才行!在上图中,我们需要填写:
(2)Saved Sessions 取个好记的名字, (3)并且选择 SSH 那个选项才行! 请千万记得,填写完毕之后,一定要按下右边的『Save』按键,这样您的设定才会被记录下来喔!接着下来,我们要设定的是每次登入的时候,都会进行记录的项目,所以,您可以在左边的画面上面按下『Logging』然后将右边的『Always append to the end of it』,这样才不会每次登入的时候,系统都要问您一次,是否需要记录! 接着下来,我们还可以调整整个 putty 的屏幕大小呢!以下图为例,我设定我的登入画面为 40 行与 100 个字符!这样的画面比起传统的 24 * 80 要大的多,看起来也比较舒服就是了〜那么那个 1000 表示我的滚动条有 1000 行的纪录,可以方便我往前查询呢! 调整完了屏幕的大小之后,再来这是最重要的:『您要以哪一个版本的 SSH 算法登入?!』前面说过,我们预设是以 version2 来登入的,所以这里我们可以调整为 2 那个项目!这样每次登入都会以 version 2 的模式登入主机了! 好了,已经都设定完毕了,再来当然又是要记录啰!所以请回到『Session』的设定里面,再按下一次『Save』,这个时候在中间的大框框就会出现您输入的记录名称,然后,以后要登入 SSH 主机时,就直接给他点两下 test.linux.org 那个(就是您刚刚自行设定的纪录名称),就可以进入您所点选的主机啰! 整个 putty 大致上的流程就是这样!如此一来,您就可以在 Windows 上面以 SSH 的协议,登入远程的 Linux 主机噜!粉方便吧! ^_^ !如果还要其他的设定,那么就直接修改 Saved Sessions 与 HostName 这两个项目,然后再次给他 Save ,嘿嘿!就又多一个设定值了!而且还是跟刚刚的设定值相同!很容易设定的啦!那么如果想要中文支持的话,目前 putty 已经支持中文啦!您可以输入中文喔!不过需要修改一下字符集,选择左边画面的『window』项目,并选择『Appearance』设定内容,设定: 在出现的上面框框中,选择右边第二个项目内的『Change』去修改字符集显示: 将(1)字型设定为细明体(2)字集设定为『Big5』,如此一来,您的 putty 就支持中文的输入啰! ^_^
这一支程序的重点则是在于以 sftp 联机上 Server 。联机的方式可以直接点选 psftp 这个档案,让他直接启动,则会出现下面的图样: psftp: no hostname
specified; use "open host.name" to connect
这个时候可以填入您要连接上去的主机名,例如我的区域内网络 test.linux.org
这个主机:
psftp> psftp: no hostname
specified; use "open host.name" to connect
呵呵!这样就登入主机啦!很简单吧!然后其他的使用方式跟前面提到的 sftp 一样哩!加油的使用吧!psftp> open test.linux.org login as: test Using username "test". test@test.linux.org's password: Remote working directory is /home/test psftp> 详细设定 sshd 服务器 基本上,所有的 ssh 相关设定都放在 /etc/ssh/sshd_config 里面!不过,每个 Linux distribution 的预设设定都不太相同,所以我们有必要来了解一下整个设定值的意义为何才好! # 1. 关于 SSH
Server 的整体设定,包含使用的 port 啦,以及使用的密码演算方式
Port 22 # SSH 预设使用 22 这个 port,您也可以使用多的 port ! # 亦即重复使用 port 这个设定项目即可! Protocol 2,1 # 选择的 SSH 协议版本,可以是 1 也可以是 2 , # 如果要同时支持两者,就必须要使用 2,1 这个分隔了! #ListenAddress 0.0.0.0 # 监听的主机适配器!举个例子来说,如果您有两个 IP, # 分别是 192.168.0.100 及 192.168.2.20 ,那么只想要 # 开放 192.168.0.100 时,就可以写如同下面的样式: ListenAddress 192.168.0.100 # 只监听来自 192.168.0.100 这个 IP 的SSH联机。 # 如果不使用设定的话,则默认所有接口均接受 SSH PidFile /var/run/sshd.pid # 可以放置 SSHD 这个 PID 的档案!左列为默认值 LoginGraceTime 600 # 当使用者连上 SSH server 之后,会出现输入密码的画面, # 在该画面中,在多久时间内没有成功连上 SSH server , # 就断线!时间为秒! Compression yes # 是否可以使用压缩指令?当然可以啰! # 2. 说明主机的 Private Key 放置的档案,预设使用下面的档案即可! HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私钥 HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私钥 HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私钥 # 2.1 关于 version
1 的一些设定!
# 3. 关于登录文件的讯息数据放置与
daemon 的名称!
# 4. 安全设定项目!极重要!
# 4.5 登入后的项目:
# 4.6 关于用户抵挡的设定项目:
# 5. 关于 SFTP
服务的设定项目!
基本上,在您的系统中,『除非有必要,否则请不要更改 /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 了,因此,可以立即进入数据传输接口中,而不需要再输入密码呢!在实作上的步骤可以是:
假设前提:
b. Client 部分为 test2.linux.org 这部 192.168.0.100 PC 的 test2 这个账号,他要用来登入 192.168.0.2 这部主机的 test 这个账号。
建立的方法真的是简单到不行!直接在 192.168.0.100 这个 Client 上面,以 test2 这个账号,使用 ssh-keygen 这个指令来进行 Key 的产生即可!不过,需要注意的是, version 1 与 version 2 使用的密码演算方式不同,此外, version 2 提供两个密码演算的方法,我们这里仅针对 version 2 的 RSA 这个演算方法进行说明! [test2@test2
test2]$ ssh-keygen -t rsa <==这个步骤在产生
Keys
请注意上面喔,我的身份是 test2 ,所以当我执行 ssh-keygen 时,才会在我的家目录底下的
.ssh/ 这个目录里面产生所需要的两把 Keys ,分别是私钥(id_rsa)与公钥(id_rsa.pub)。另外一个要特别注意的就是那个
id_rsa 的档案权限啦!他必须要是 -rw------- 才好!否则内容被人家知道了,那么您的
Keys 不就有可能外泄了?所以请特别留意他的权限喔!那么那个 id_rsa.pub 则是『公钥!』这个档案必须要被放置到
Server 端才行!
Generating public/private rsa key pair. Enter file in which to save the key (/home/test2/.ssh/id_rsa): Enter passphrase (empty for no passphrase): <==这里按 Enter Enter same passphrase again: <==再按一次 Enter Your identification has been saved in /home/test2/.ssh/id_rsa. <==这是私钥 Your public key has been saved in /home/test2/.ssh/id_rsa.pub.<==这是公钥 The key fingerprint is: c4:ae:d9:02:d1:ba:06:5d:07:e6:92:e6:6a:c8:14:ba test2@test2.linux.org 注意: -t 指的是『使用何种密码演算方式?』由于我们使用 RSA , 所以直接输入 -t rsa 即可建立两支 Keys ! 此外,建立的两把 Keys 都放置在家目录下的 .ssh 这个目录中! 察看一下这两把 Keys 吧! [test2 @test2
test2]$ ll ~/.ssh
在预设的条件中,我们的私钥必需要放置在家目录底下的 .ssh 里面,那么如果是 version 2 的 RSA 算法,就需要放置在 $HOME/.ssh/id_rsa 当中!咦!刚好使用 ssh-keygen 就是已经产生在这个目录下了,所以自然就不需要去调整他了!以我的 test2.linux.org 来看,那么我的档案就会放置在 /home/test2/.ssh/id_rsa 这个档案就是私钥啦! 既然我们要让 test2 可以以 test 这个账号登入 test.linux.org 这部主机,那么这部主机自然需要保有 test2 的 public key 啰!对的!所以我们必需要将 Client 端建立的 id_rsa.pub 档案给他拷贝到 test.linux.org 里头的 test 这个用户的家目录之下!那么如果您还记得上面的 sshd_config 这个档案的设定的话,那么应该就记得『AuthorizedKeysFile』这个设定吧!是的!在被登入的主机的某个账号,他的公钥放置的文件名默认就是这个项目所记载的!而他预设的档名就是 authorized_keys 这个文件名啦!那么应该怎么做呢? 1. 先在 Client
端以 sftp 将公钥丢到 test 上面去!
请注意上面的机器!由于 authorized_keys 可以保存相当多的公钥内容,因此,可以使用
>> 的方式来将 Client 端的公钥新增到该档案内!呵呵!做完这一步一后,未来
test2 就可以直接在 test2.linux.org 以
[test2@test2 test2]$ cd ~/.ssh <==切换目录 [test2@test2 .ssh]$ sftp test@test.linux.org<==连到主机上面 Connecting to test.linux.org... test@test.linux.org's password: <==输入 test 的密码 sftp> put id_rsa.pub <==将公钥丢到 Server 上面去! Uploading id_rsa.pub to /home/test/id_rsa.pub sftp> exit 2. 到 Server
上面,将公钥转存到 authorized_keys 档案中!
[test2@test2
test2]$ ssh test@test.linux.org
这样就可以不需要输入密码啰!但是请注意, test 不能以 test2 登入 test2.linux.org
喔!
安全设定: 好了,那么关于安全的设定方面,有没有什么值得注意的呢?当然是有啦!我们可以先建议几个项目吧!分别可以由:
这三方面来着手进行!底下我们就说一说吧!
基本上, SSH 还蛮安全的,只要取消 root 的登入权限,那么问题应该就会比较小一点啦!所以,虽然可以不用设定 iptables ,但是建议针对几个网域设定一下 /etc/hosts.allow 与 /etc/hosts.deny !加油啰! 大标题的图示参考资源
大标题的图示课后练习
前往参考解答 2002年11月14日:第一次完成 2003年03月08日:加入标头说明,与修改部分内容,例如 Telnet 服务器软件的安装等等,以及 SSH 的 putty 使用中文状态! 2003年09月09日:将本文进行一些修订,此外,加入了课后练习! |
|
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室