1. 安装软件包
事实上,在我们使用的
CentOS 6 当中, SSH 所需要的所有软件包默认就
已经安装好了。其中包含了
openssh(核心文件)openssh-clientsSSH 客户端)
openssh-serverSSH 服务器端)。我们可以用 yum 命令进行查看来确认这
些软件包都已经被安装好了。
[[email protected] ~]# yum list installed openssh*
Loaded plugins: fastestmirror, priorities, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: mirrors.ta139.com
* extras: mirrors.ta139.com
* updates: mirrors.ta139.com
Installed Packages
openssh.x86_64 5.3p1-81.el6 @anaconda-CentOS-201207061011.x86_64/6.3
openssh-clients.x86_64 5.3p1-81.el6 @anaconda-CentOS-201207061011.x86_64/6.3
openssh-server.x86_64 5.3p1-81.el6 @anaconda-CentOS-201207061011.x86_64/6.3
[[email protected] ~]#
当然,如果你的系统上并未安装 openssh 相关软件包,那么只要简单用如下
yum 命令(错误!未找到引用源。) 进行安装即可(yum 在处理依赖性问题时自动
会将其他软件包安装上):
[[email protected] ~]# yum install openssh
2. 启动服务
openssh-server 的守护程序名为 sshdsshd 在系统启动时由启动脚本
/etc/init.d/sshd)自动启动。 我们可以用“chkconfig --list” 命令列出系统服务
列表, 找到
sshd, 一般来说其状态应该如下所示:
[[email protected] ~]# chkconfig --list|grep sshd
sshd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
# 表示 sshd 在运行级别 234 5 都是开机自动启动的(运行级别的解释可参考错误!
未找到引用源。)
[[email protected] ~]#
当然,如果你的系统上 ssh 服务没有开机自动启动的,那么只要简单用如下
chkconfig 命令让其在相应运行级别开机自启动就可以了。
[[email protected] ~]# chkconfig - -level 2345 sshd on
也可以使用 service 命令或者使用/etc/init.d/sshd 脚本手动启动/停止/重启
SSH 服务等操作(参考 10.2 任务 4)。
3. 开放端口
最后,我们需要确认系统防火墙
(iptables)是否开放了 SSH 服务的 22 端口,
可使用如错误
!未找到引用源。 所示的方法查询,如果显示也如错误!未找到引用
源。 第
3 行所示,那么就表示 SSH 服务的 22 端口正常开放,否则就需要用 vi
打开 iptables 的配置文件/etc/sysconfig/iptables 添加该行, 然后重启防火墙服务
即可。 当然也可以直接使用
CentOS 中提供的伪图形界面防火墙设置工具
system-config-firewall 来设置。
[[email protected] ~]# cat /etc/sysconfig/iptables|grep 22
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
[[email protected] ~]#
至此, SSH 服务器就架设好了,可以接受客户端远程联机请求了。
4. 安全配置
但此时
SSH 服务器并不安全,我们还需要进行一些额外安全配置,使得 SSH
服务器变得更加安全靠谱。
安全配置可以分三步走:(
1SSH 服务器自身安全配置;(2)系统防火墙
tcp_wrappers1) 配置;(3)通过可靠的手段向用户公布主机指纹。
首先,是通过对
SSH 服务器本身进行配置来提高其安全级别, openssh
主要配置文件为和
/etc/ssh/sshd_config(详细可参考知识点 2)OpenSSH 默认
从此文件读取配置信息。 用
vim 打开/etc/ssh/sshd_config, 我们主要将改动如下
几个配置,通过改动这些配置,我们可以拒绝特定用户联机,并且主动断开长时
间没有动作的客户端:
[[email protected] ~]# vim /etc/ssh/sshd_config
Protocol 2
#
表示不接受 root 用户远程联机
PermitRootLogin no
#
表示不接受口令为空的用户远程联机
PermitEmptyPasswords no
#
表示不接受主组为“not_ssh_user”用户远程联机
DenyGroups not_ssh_user
#
表示不接受名为“dev”用户远程联机
DenyUsers dev
#
表示当客户端 30 秒内没有任何动作,服务器将发送一个 alive 消息给客户端,如果连发 4
#
alive 消息,客户端仍然没有动作,服务器将断开连接.
ClientAliveInterval 30
ClientAliveCountMax 4
1为了更加安全, 除了 tcp_wrappers 外, 还可以考虑用 iptables 来过滤来自 Internet 的网络包,只允许特定
IP 地址的包进入主机的 22 端口。
注意
SSH 协议确实是一个安全的协议,但此安全指的是 SSH 协议传输
的数据是经过强度较高的加密算法加密的,因此
安全,这并不等于
SSH 服务本身就是一个安全的服务,一个没有经过良好配置的 SSH
服务器仍是黑客下手的好对象。


接着,可以用 tcp_wrappers 来指定可以访问 ssh 服务的特定 IP 地址,同时
拒绝其他
IP 地址访问 ssh 服务(可参考 10.5 拓展 2)。
首先用
vim 打开/etc/hosts.deny 文件,添加如下行,表示拒绝所有 ssh 连接:
sshd:ALL:deny
/etc/hosts.deny 文件就定义完成了。接下来,打开/etc/hosts.allow 文件,添
加如下行,表示只接受来自
192.168.71.0 网段和地址为 39.187.121.53 主机的
连接。
sshd: 39.187.121.53 192.168.71.0/255.255.255.0:allow
在这里, 我们只想让拥有内网 IP192.168.71.0)和指定的外网 IP
39.187.121.53) 的远程终端通过 SSH 登录到服务器,以最大限度减少不安全
因素。
最后,管理员可以通过安全渠道(可靠论坛、
BBS、电邮或者电话) 向终端
用户公布本主机的
SSH 指纹, 用户可以比对此公开指纹和登录主机的指纹来确
认主机身份的真实性, 以防止遭受中间人(
man-in-the-middle)攻击(在任务 2
中会涉及到主机指纹的比对)。
[[email protected] ~]# ssh-****** -lf /etc/ssh/ssh_host_rsa_key
# 用主机私钥生成主机**指纹,注意只有 root 才有读写主机私钥的权限
2048 42:d6:82:81:5d:20:2e:d3:c8:9b:09:e4:91:c1:6f:f4 /etc/ssh/ssh_host_rsa_key.pub
(RSA)
#
42:d6:82:81:5d:20:2e:d3:c8:9b:09:e4:91:c1:6f:f4 就是主机**指纹
窍门
作为管理员, 可以考虑将不允许通过 SSH 远程联机的用户归到一个
用户组中,然后拒绝这个组远程联机;
同时为了安全起见, 可以考虑不允许 root 远程联机,在需要用 root
身份进行管理时, 通过普通用户远程登录到主机,然后再用“su –
root
”命令获得 root 权限。

小心
在任何情况下都不能将 SSH 登录权限开放给网络上的所有主机,尤
其是
Internet 上的主机。

注意
中间人攻击(Man-in-the-Middle Attack, MITM)是一种由来已久的网
络入侵手段,并且在今天仍然非常见,如
ARP 欺骗、 DNS 欺骗等都
是典型的
MITM。 简而言之,所谓的 MITM 就是通过拦截通信的双方
正常的网络通信数据,并进行窃取和篡改,而通信的双方却毫不知情。
MITM 一般有两种模式:一是当主机 A B 通信时, C 可以拦截 A
的通信数据,假冒 B A 进行通信来窃取 A 的敏感信息,当下常见
的“钓鱼网站”就属于此类
MITM;二是当主机 A B 通信时, 被主


5 Linux 上用 SSH 客户端远程登录主机
Linux 终端上通过 SSH 登录客户端非常简洁,使用的是 openssh-clients
SSH 客户端)这个软件包, 使用的命令是 ssh。 接下来我们就通过 ssh 来登录
到我们刚刚建立好
SSH 服务器的主机上去。
[[email protected] ~]# ssh [email protected]
#
连接到自己本机上面的 ssh 服务
The authenticity of host '192.168.71.128 (192.168.71.128)' can't be established.
#
首次连接主机时会提醒用户确认主机的身份
RSA key fingerprint is 42:d6:82:81:5d:20:2e:d3:c8:9b:09:e4:91:c1:6f:f4.
#
通过主机 RSA 公钥生成的主机指纹
Are you sure you want to continue connecting (yes/no)? yes
#
填入完整的 yes(而不是 y)来同意连接主机
Warning: Permanently added '192.168.71.128' (RSA) to the list of known hosts.
#
记录下主机的公钥,以便于下次连接时进行指纹比对
[email protected]'s password: #输入用户口令
Last login: Fri Feb 8 16:42:44 2013 from localhost
[[email protected] ~]$ exit #
如果离开终端,要及时登出
logout
Connection to 192.168.71.128 closed.
[[email protected] ~]#
你可能注意到了在登录过程中, 在输入用户口令之前, 会出现了一个奇怪的
The authenticity of host '192.168.71.128 (192.168.71.128)' can't be
established.
(主机 192.168.71.128 的真实性无法确实)”的提示,并且在后面
还给出了一个所谓的“
RSA key fingerprintRSA **指纹)”,你只有输入了
yes”确认要登录此主机后才能继续输入用户口令。
C 拦截并为其“转发”,而 AB 之间并没有真正意思上的直接通
信,他们之间的信息传递是通过
C 作为中介来完成的,但是 AB
有意识到,而以为它们之间是在直接通信。这样攻击主机在中间成为
了一个转发器,
C 不仅可以窃取 AB 的敏感信息还可以将这些信息
进行恶意篡改后再传给对方。

命令
用法: ssh [选项] 用户名@主机名或者 IP 地址
-p 指定主机 SSH 端口,如不指定,默认为 22 端口

注意


当然并非每次登录都需要进行主机指纹确认,当客户端成功连接过这台主机
一次后,如果主机指纹此后没有发生变化,那么就不会再给出确认主机指纹的提
示了。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
23:00:20:83:de:02:95:f1:e3:34:be:57:3f:cf:2c:e7.
Please contact your system administrator.
Add correct host key in /home/xahria/.ssh/known_hosts to get rid of this message.
Offending key in /home/xahria/.ssh/known_hosts:8
RSA host key for localhost has changed and you have requested strict checking.
Host key verification failed.
事实上,这是一种中间人攻击防护措施。 SSH 客户端在首次远程连
SSH 服务器的时候,客户端将获取服务器上的主机公钥并保存在
客户端相关文件中,并通过该主机公钥生成一个主机指纹(一串字符)
提示给用户。
此时如果用户知道主机私钥生成的主机指纹(由管理员事先告知或者
自行通过本地登录主机获取),那么你就可以比对这两个指纹是否相
同,如果相同,那么这台主机的身份就是真实无误的,可以键入“
yes
放心登录。如果不相同,那么就要怀疑有其他不怀好意的主机冒充我
们要登录的主机,诱骗我们登录来窃取信息了。此时我们就需要向主
机管理员进行确认后再行登录了。

小心
如果你曾经登录过这台主机,但是又让你确认主机指纹, 那么就
表示主机指纹发生了变化, 可能由以下
3 种情况所导致的:
A. 主机重新安装了操作系统或者重新安装了 openssh 服务
器;
B. 这台主机可能有多个 IP 地址,这次登录是另外一个 IP
址;
C. 有其他不怀好意的主机冒充我们要登录的主机,诱骗我们
登录来窃取主机口令。
一般来说,我们碰到的都应该是前两个情况, 输入“yes”就行
了,但如果要登录的主机确实很敏感,建议输入“
no”, 向主机


6 windows 上用 SSH 客户端远程登录主机
如果使用
Windows 系统, Windows 下默认没有安装支持 SSH 协议的客户
端软件。用户需要自行下载安装。 我们推荐使用
PuTTY, 这是一款开源的 SSH
客户端软件,能够在多种平台上运行(当然包括 Windows 目前流行的各个版本)。
可以在如下地址下载到
PuTTY:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
打开这个下载页面, 我们注意到列出的 PuTTY 相关下载文件总共有 7 个,
7 个文件均是可执行文件,分别有不同的用途, 其中有 2 个文件是我们必须下
载的:
文件名 用途
PuTTY.exe 远程联机客户端,使用 Telnet SSH 协议(必须)
PSCP.exe SCP 客户端, 命令行下通过 SSH 拷贝文件,类似于
Unix/Linux 下的 scp 命令(可选)
PSFTP.exe SFTP 的命令行客户端,类似于 FTP 的文件传输,只不
过使用的是
SSH 22 端口, 而非 FTP 21 端口,
类似于
Unix/Linux 下的 sftp 命令(可选)
PuTTYtel.exe 远程联机客户端,仅仅使用 Telnet 协议(可选)
Plink.exe 命令行工具,执行远程服务器上的命令(可选)
Pageant.exe PuTTYPSCPPlink SSH 认证代理,用这个可以不
用每次都输入口令
PuTTYgen.exe RSA DSA **生成工具(必须)

下载 PuTTY.exe, 双击直接运行就可以看到如错误!未找到引用源。 这个界
面:
2所以记得备份注册表中的 PuTTY 相关内容,下次重装机器这些配置就没了。
管理员进行确认后再行登录。

注意
在下载这这两个文件文件后,我们还需要需要要验证下载的文件的完
整性以保证这些下载的文件没有被发布者之外的第三方改动过。可以
下页面上提供的
MD5 文件来进行校验(具体校验方法 可以参考” 1
部署一个好的 Linux 系统 任务 3 获取安装镜像盘)。
PuTTY 是一个准绿色软件,不需要安装。说它绿色是因为直接就能
使用,完全没有任何的安装程序。准绿色是指
PuTTY 的所有配置都
保存到了注册表
2


首先选取 ssh 的参数设定部份,点击选择 Category 中的 SSH 选项, 并选择
ssh 的版本为“2” 或者“2 only” 以获得更好的安全性。
注意
SSH 协议到目前为止有两个不兼容的版本——SSH1 SSH2
SSH1 采用 DES3DESBlowfish RC4 等对称加密算法保护数
据安全传输,而对称加密算法的**是通过非对称加密算法(
RSA
来完成交换的。
SSH1 使用循环冗余校验码(CRC)来保证数据的完
整性,但是后来发现这种方法有缺陷。
SSH2 避免了 RSA 的专利问题,并修补了 CRC 的缺陷。
客户端连接服务器时, 双方将通过版本协商确定具体使用哪个协议,
PuTTY 中如果选择了“2”, PuTTY 将优先使用 SSH2 来进行连
接, 如果选择了“
2 only”那么 PuTTY 将只使用 SSH2 来进行连
接。


为解决中文显示问题, 我们需要进行两项设置。首先点击选择 Category
Windows 下的 Appearance 选项, 指定光标的显示方式为“Underline(下划
线)”(默认为“
Block(块状)”) 以避免出现光标处半个中文字被遮挡的情况。
还需要点击选择
Category 中的 Windows 下的 Translation 选项, 在下拉框
中将字符集修改为“
UTF-8”(默认为 ASCII),以避免中文出现乱码。
注意


如果你愿意,还可以通过点击选择 Category 中的 Windows 下的 Colours
项,在这里可以根据自己喜好来修改命令行背景和字体的颜色(我们推荐使用经
典的黑色背景,绿色字体
)。
乱码是由于系统或软件缺乏对某种字符编码的支持,而产生的不能正
常阅读的混乱字符。
一般我们在安装 Linux 时,如果在支持语言中选择了“中文”,那么
系统将使用
UTF-8 字符编码方式, UTF-8 属于万国码,也就是说使用
此编码,系统将支持在同一个页面或窗口显示多国语言
,比如:中文、
英文、 日文等等。 客户端连接服务器“时, 也必须选择对应的字符编
码方式,否则就会出现乱码。
我们可以在命令行中输入“echo $LANG $LANGUAGE ” 来查看当
前系统当中使用的字符编码方式


最后我们点击选择“Category”中的“Session” 选项, 在这里输入服务器的
IP 或主机名,选择好登录协议,还有协议的端口(默认是 22 端口)。 如果希望
把这次的输入保存起来,以后不需要再重新输入,就在第“
Saved Session”文
本框中输入好会话的名称,比如“
CentOS6 64bit”,或者干脆就是主机的地址,
点击保存就可以了。最后点下面的
Open 按钮,输入正确的用户名和口令,就
可以登录服务器了。
首次登录一台主机时,会看到这个对话框。这是要告诉你登录的主机指纹(有

关主机指纹,可参考“1. Linux 上用 SSH 客户端远程登录主机”的相关内容),
点 “
Yes” 就保存这个主机的指纹,以后就不会再弹出这个窗口,然后就正常登
录。点“
No” 不保存,下次还是要提示你,然后也可以正常登录。如果一台主机
我们只是临时登录一下,当然就是点“
No” 了。 如果点击“Cancel” 就取消了这
次登录。
如果一切顺利,出现如下窗口时,就表示我们联机成功了,标题中将会出现
登录主机的
IP 地址或者主机名,让后在“login as:”后输入用户名,接着根据
提示输入用户口令就可以登录主机了。
小心
如果你曾经登录过这台主机,但是又弹出来这个对话框, 那就要注意
一下了,(具体可以参考“在
Linux 上用 SSH 客户端远程登录主机”
的相关内容)



ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机ssh远程登陆主机

相关文章: