您的位置:首页 > 运维架构 > 网站架构

centos5.4下架构SSH(基于证书验证)

2012-01-10 11:10 302 查看
SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层 和传输层 基础上的安全协议。

传统的网络服务程序,如FTP 、POP和Telnet 其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。

而 SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。透过 SSH 可以对所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 欺骗。

系统及版本:CentOS release 5.4 (Final)

我们先查找软件包信息

yum search sshd

安装SSH

yum install openssh

启动SSH

service sshd start

设置开机运行

chkconfig sshd on

这里我们先说说第一种安全登录方法,那就是限制IP登录。我们需要修改两个文件/etc/hosts.deny和/etc/hosts.allow 这两个文件一看就知道作用。

nano /etc/hosts.deny

我们在文件的最后面添加 SSHd:ALL 看起来像这样

#

# hosts.deny This file describes the names of the hosts which are

# *not* allowed to use the local INET services, as decided

# by the '/usr/sbin/tcpd' server.

#

# The portmap line is redundant, but it is left to remind you that

# the new secure portmap uses hosts.deny and hosts.allow. In particular

# you should know that NFS uses portmap!

SSHd:ALL (这个为添加部份,屏蔽来自所有的SSH连接请求)

nano /etc/hosts.allow

我们也在文件的最后加入你想允许SSH连接的IP(添加SSHd:192.168.100.)我的内部IP段为192.168.100.0/24。看起来像这样

#

# hosts.allow This file describes the names of the hosts which are

# allowed to use the local INET services, as decided

# by the '/usr/sbin/tcpd' server.

SSHd:192.168.100.

我们重启SSHD,在修改完SSH的配置文件后,需要重新启动SSH服务才能使新的设置生效

/etc/init.d/sshd restart

topping sshd:             [ OK ]

Starting sshd:             [ OK ]   ← SSH服务器重新启动成功

这样用SSH客户端软件登录来测试一下IP的限制吧,有人就问这样还不是够安全,也许这台服务器的登录(包括root)账号有很多人知道密码,而像先前的那种方法虽然可以限制IP,但只要是linux的账号,都可以登录并有意破坏,还是不够安全,能不能指定一个SSH的管理账号来专门用于SSH,并实现证书登录。

所先我们要修改SSH的配置文件,路径到/etc/ssh/sshd_config

nano /etc/ssh/sshd_config

我们需要修改以下部份,我只列出要修改的,其它的各原配置一样

nano /etc/ssh/sshd_config   打开SSH的配置文件

#Protocol 2,1  找到此行将行头“#”删除,再将行末的“,1”删除,只允许SSH2方式的连接

 ↓

Protocol 2  修改后变为此状态,仅使用SSH2

#ServerKeyBits 768  找到这一行,将行首的“#”去掉,并将768改为1024

 ↓

ServerKeyBits 1024  修改后变为此状态,将ServerKey强度改为1024比特

#PermitRootLogin yes  找到这一行,将行首的“#”去掉,并将yes改为no

 ↓

PermitRootLogin no  修改后变为此状态,不允许用root进行登录

#PasswordAuthentication yes  找到这一行,将yes改为no

 ↓

PasswordAuthentication no  修改后变为此状态,不允许密码方式的登录

#PermitEmptyPasswords no   找到此行将行头的“#”删除,不允许空密码登录

 ↓

PermitEmptyPasswords no   修改后变为此状态,禁止空密码进行登录

我们建一个普通用户sshadmin,用来作SSH远程登录的账号

useradd sshadmin (建立账号)

su - sshadmin (切换到sshadmin)

ssh-keygen -t rsa   (建立公钥与私钥)

Enter file in which to save the key (/home/sshadmin/.ssh/id_rsa): ←(钥匙的文件名,这里保持默认直接回车)

Created directory ‘/home/sshadmin/.ssh’

Enter passphrase (empty for no passphrase):  ← 输入口令

Enter same passphrase again:   ← 再次输入口令

Your identification has been saved in /home/sshadmin/.ssh/id_rsa. (私钥)

Your public key has been saved in /home/sshadmin/.ssh/id_rsa.pub. (公钥)

The key fingerprint is:

tf:rs:e3:7s:28:59:5s:93:fe:33:84:01:cj:65:3b:8e
centospub@sample.sshadmin.com

然后确认一下公钥与密钥的建立,以及对应于客户端的一些处理。

cd ~/.ssh   ← 进入用户SSH配置文件的目录

ls -l   ← 列出文件

-rw------- 1 sshadmin sshadmin 1743 01-14 13:39 id_rsa (确认私钥己建立)

-rw-r--r-- 1 sshadmin sshadmin 410 01-14 13:39 id_rsa.pub (确认公钥己建立)

接着我们将私钥内容输出到相应文件中

cat ~/.ssh/id_rsa >> ~/.ssh/authorized_keys

我们将新建的私钥文件给上权限

chmod 400 ~/.ssh/authorized_keys

最后需要将这个文件,考备到客户端,你们可以使用U盘,FTP都行,我在这里用的是一个winscp,SSH文件传输工具。因为前面我们对ssh配置文件做了修改,ROOT是无法登录的,我们再修改一下

nano /etc/ssh/sshd_config

将 PermitRootLogin no

改为 PermitRootLogin yes

将 PasswordAuthentication no

改为 PasswordAuthentication yes

/etc/init.d/sshd restart

用winscp定位到/home/sshadmin/.ssh/ 将id_rsa 考备出来,我们要用到puttygen密钥生成工具,

运行puttygen,选择“载入”文件为 id_rsa,它们成功显示密钥的信息,我们再点右下的“保存私钥”。

最后用到的putty远程SSH连接工具,定位到“SSH”选项 “认证”再“认证密钥文件”选择刚刚保存的文件。在“会话”里填 上服务器的IP,再转换里面选择字符集为“UTF-8”。

为了安全起见我将删除原来的私钥,你也可以不用删除。

rm -f ~/.ssh/id_rsa
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: