为了提高主机的安全级别, OpenSSH 可以禁止用户以密码身份认证方式登录,
而基于密钥身份认证的方式登录。
1. 禁止用户以密码身份认证方式登录
首先修改 SSH 的配置文件禁止用户以密码身份认证方式登录。 打开
/etc/ssh/sshd_config 文件,按照错误!未找到引用源。 进行修改,并保存退出
[root@localhost ~]# vim /etc/ssh/sshd_config
#PasswordAuthentication yes #找到这一行,将 yes 改为 no
PasswordAuthentication no #修改后变为此状态,不允许密码方式的登录
在修改完 SSH 的配置文件后,需要重新启动 SSH 服务才能使新的设置生
效。
[root@localhost ~]# /etc/rc.d/init.d/sshd restart #重新启动 SSH 服务
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
这时,在远程终端上用 SSH 客户端软件以密码验证身份的的方式就无法登
录主机了。 如果用 Linux SSH 客户端登录,会给出“Permission denied”的提示。
[root@localhost ~]# ssh stu@192.168.71.128
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
[root@localhost ~]#
如果用 PuTTY 登录则会弹出如下错误提示:
2. 生成密钥
我们接下就要建立 SSH 用的密钥, 使得 SSH 客户端能够通过密钥验证方
式以某个特定用户身份(例如 stu) 登录主机。 首先, 主机管理员以 stu 身份登
录服务器, 用 ssh -keygen -t rsa 命令建立一对 rsa 密钥。
[stu@localhost ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
#提示正在生成一对 rsa 密钥(包含一个公钥和一个密钥)
Enter file in which to save the key (/home/stu/.ssh/id_rsa):
# 输入密钥的存放路径,按回车放置在默认路径(/home/stu/.ssh/)下
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
#两次输入私钥的口令
Your identification has been saved in /home/stu/.ssh/id_rsa.
# 生成的私钥放在 id_rsa 文件中
Your public key has been saved in /home/stu/.ssh/id_rsa.pub.
# 生成的对应公钥放在 id_rsa.pub 文件中
The key fingerprint is:
44:66:ca:88:2b:02:6b:c8:07:74:b0:83:76:16:cb:06 stu@localhost.localdomain
#密钥的指纹(就是密钥的 MD5 码)
The key's randomart image is: #
+--[ RSA 2048]----+
| E.o + |
|o =.oo = |
|o=.*. o . |
|=.*. . |
|=o.. S |
|o.. |
| |
| |
| |
+-----------------+
#密钥的随机字符图(randomart image) 用于让密钥的指纹更加直观
[stu@localhost ~]$
然后确认一下公钥与私钥的是否已经生成, 并将公钥加入到 stu 用户的指定
公钥文件中(默认是~/.ssh/authorized_keys)。
[stu@localhost ~]$ ls -l ./.ssh
总用量 8
-rw-------. 1 stu stu 1743 5 月 18 15:26 id_rsa
-rw-r--r--. 1 stu stu 407 5 月 18 15:26 id_rsa.pub
# 查看公钥和私钥是否生成
[stu@localhost ~]$ cat ./.ssh/id_rsa.pub >>authorized_keys
# 将公钥放入 stu 用户的密钥授权文件中
[stu@localhost ~]$ chmod 400 ./.ssh/authorized_keys
#修改密钥授权文件的读写属性为 400
[stu@localhost ~]$ rm -f ./.ssh/id_rsa.pub
#将公钥文件及时删除
3. 分发密钥并用 Linux 的 SSH 客户端以密钥认证的方式登录主机
然后, 主机管理员可以将私钥文件通过安全的方式分发给某个用户(例如,
dev 用户), dev 用户就可以将此私钥文件放置在 “~/.ssh”目录下,通过此私钥,
dev 用户就可以在远程终端上通过 SSH 客户端以 stu 用户的身份连接到主机上
了。
[dev@localhost ~] ls ~/.ssh
-rw-------. 1 dev dev 1743 5 月 18 15:26 id_rsa
# 确保私钥文件的读写权限为 600,并且从属用户 dev 本人
[dev@localhost ~]$ ssh stu@192.168.71.128
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.
#主机密钥指纹
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.
#记录下主机的指纹,以便于下次连接时进行比对
Enter passphrase for key '/home/stu/.ssh/id_rsa':
#输入密钥的口令
Last login: Sat May 18 14:58:35 2013 from 192.168.71.1
[stu@localhost ~]$
#成功联机!
4.用 PuTTY 客户端以密钥认证的方式登录主机
如果要使用 PuTTY 作为客户端就稍微麻烦一点了。服务器端直接生成的私
钥 PuTTY无法直接使用,需要用 PuTTYGen来转换为 PuTTY可以使用的私钥。
由于此过程比较繁琐,我们下面将对步骤进行编号:
(1) 下载私钥转换工具 PuTTYGen(参看错误!未找到引用源。) , 并且将要转换
的私钥复制到远程终端的适当位置上。运行 PuTTYGen ,出现如下窗口,
点击 Load,选取服务器端生成的私钥(文件类型要选择“All Files”)。
(2) 开始转换私钥, 此时需要输入建立此私钥时的口令。在文本框中输入口令开
始转换,如下:
(3) 如果转换成功后,会弹出转换成功的提示窗口,点击确定进入下一步。如下:
(4) 保存转换后的私钥匙到适当的位置(转换后的私钥将做为 PuTTY 登录到服
务器时使用的私钥)。点击“Save private key”,并选择适当的位置保存私钥。
最后,关闭 PuTTYGen,下面我们开始用 PuTTY 远程登录服务器。
(5) 双击启动 PuTTY ,在左侧找到 Auth(认证方式)一项,对连接是使用的私
钥进行设定, 点击 Browse,选择刚刚用 PuTTYGen 转换后的私钥。
(6) 然后点击左侧的 Session,回到主机连接信息的设置,填写余下的主机信息,
并保存(可参考 任务 2)最后点击“Open”登录。
(7) 在弹出的登录窗口中输入的用户名, 注意,在输入完用户名后,不会出现用
户密码输入提示,因为在 SSH 服务器配置中我们禁止了用户通过用户密码
方式的 SSH 登录。这时候会出现要求输入私钥口令的提示,这个口令就是
在服务器端建立相应用户(stu)的私钥的时候设置的口令。输入私钥口令,
使用私钥进行登录。如下:
(8) 输入正确私钥口令后, 成功联机!
但作为管理员, 可以通过此用户远程登录到主机,然后再用“su”命令获得
root 权限,对系统进行配置
而基于密钥身份认证的方式登录。
1. 禁止用户以密码身份认证方式登录
首先修改 SSH 的配置文件禁止用户以密码身份认证方式登录。 打开
/etc/ssh/sshd_config 文件,按照错误!未找到引用源。 进行修改,并保存退出
[root@localhost ~]# vim /etc/ssh/sshd_config
#PasswordAuthentication yes #找到这一行,将 yes 改为 no
PasswordAuthentication no #修改后变为此状态,不允许密码方式的登录
在修改完 SSH 的配置文件后,需要重新启动 SSH 服务才能使新的设置生
效。
[root@localhost ~]# /etc/rc.d/init.d/sshd restart #重新启动 SSH 服务
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
这时,在远程终端上用 SSH 客户端软件以密码验证身份的的方式就无法登
录主机了。 如果用 Linux SSH 客户端登录,会给出“Permission denied”的提示。
[root@localhost ~]# ssh stu@192.168.71.128
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
[root@localhost ~]#
如果用 PuTTY 登录则会弹出如下错误提示:
2. 生成密钥
我们接下就要建立 SSH 用的密钥, 使得 SSH 客户端能够通过密钥验证方
式以某个特定用户身份(例如 stu) 登录主机。 首先, 主机管理员以 stu 身份登
录服务器, 用 ssh -keygen -t rsa 命令建立一对 rsa 密钥。
[stu@localhost ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
#提示正在生成一对 rsa 密钥(包含一个公钥和一个密钥)
Enter file in which to save the key (/home/stu/.ssh/id_rsa):
# 输入密钥的存放路径,按回车放置在默认路径(/home/stu/.ssh/)下
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
#两次输入私钥的口令
Your identification has been saved in /home/stu/.ssh/id_rsa.
# 生成的私钥放在 id_rsa 文件中
Your public key has been saved in /home/stu/.ssh/id_rsa.pub.
# 生成的对应公钥放在 id_rsa.pub 文件中
The key fingerprint is:
44:66:ca:88:2b:02:6b:c8:07:74:b0:83:76:16:cb:06 stu@localhost.localdomain
#密钥的指纹(就是密钥的 MD5 码)
The key's randomart image is: #
+--[ RSA 2048]----+
| E.o + |
|o =.oo = |
|o=.*. o . |
|=.*. . |
|=o.. S |
|o.. |
| |
| |
| |
+-----------------+
#密钥的随机字符图(randomart image) 用于让密钥的指纹更加直观
[stu@localhost ~]$
然后确认一下公钥与私钥的是否已经生成, 并将公钥加入到 stu 用户的指定
公钥文件中(默认是~/.ssh/authorized_keys)。
[stu@localhost ~]$ ls -l ./.ssh
总用量 8
-rw-------. 1 stu stu 1743 5 月 18 15:26 id_rsa
-rw-r--r--. 1 stu stu 407 5 月 18 15:26 id_rsa.pub
# 查看公钥和私钥是否生成
[stu@localhost ~]$ cat ./.ssh/id_rsa.pub >>authorized_keys
# 将公钥放入 stu 用户的密钥授权文件中
[stu@localhost ~]$ chmod 400 ./.ssh/authorized_keys
#修改密钥授权文件的读写属性为 400
[stu@localhost ~]$ rm -f ./.ssh/id_rsa.pub
#将公钥文件及时删除
3. 分发密钥并用 Linux 的 SSH 客户端以密钥认证的方式登录主机
注意 |
作为系统管理员, 为了防止别人知道主机用户的密钥,你需要定期地 重新生成并分发密钥; 作 为 系 统 管 理 员 , 需 要 确 保 用 户 授 权 的 密 钥 文 件 (.ssh/authorized_keys) 读写权限为 400。 |
然后, 主机管理员可以将私钥文件通过安全的方式分发给某个用户(例如,
dev 用户), dev 用户就可以将此私钥文件放置在 “~/.ssh”目录下,通过此私钥,
dev 用户就可以在远程终端上通过 SSH 客户端以 stu 用户的身份连接到主机上
了。
[dev@localhost ~] ls ~/.ssh
-rw-------. 1 dev dev 1743 5 月 18 15:26 id_rsa
# 确保私钥文件的读写权限为 600,并且从属用户 dev 本人
[dev@localhost ~]$ ssh stu@192.168.71.128
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.
#主机密钥指纹
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.
#记录下主机的指纹,以便于下次连接时进行比对
Enter passphrase for key '/home/stu/.ssh/id_rsa':
#输入密钥的口令
Last login: Sat May 18 14:58:35 2013 from 192.168.71.1
[stu@localhost ~]$
#成功联机!
4.用 PuTTY 客户端以密钥认证的方式登录主机
如果要使用 PuTTY 作为客户端就稍微麻烦一点了。服务器端直接生成的私
钥 PuTTY无法直接使用,需要用 PuTTYGen来转换为 PuTTY可以使用的私钥。
由于此过程比较繁琐,我们下面将对步骤进行编号:
(1) 下载私钥转换工具 PuTTYGen(参看错误!未找到引用源。) , 并且将要转换
的私钥复制到远程终端的适当位置上。运行 PuTTYGen ,出现如下窗口,
点击 Load,选取服务器端生成的私钥(文件类型要选择“All Files”)。
注意 |
作为用户,需要确保私钥文件的读写权限为 600。 |
(2) 开始转换私钥, 此时需要输入建立此私钥时的口令。在文本框中输入口令开
始转换,如下:
(3) 如果转换成功后,会弹出转换成功的提示窗口,点击确定进入下一步。如下:
(4) 保存转换后的私钥匙到适当的位置(转换后的私钥将做为 PuTTY 登录到服
务器时使用的私钥)。点击“Save private key”,并选择适当的位置保存私钥。
最后,关闭 PuTTYGen,下面我们开始用 PuTTY 远程登录服务器。
(5) 双击启动 PuTTY ,在左侧找到 Auth(认证方式)一项,对连接是使用的私
钥进行设定, 点击 Browse,选择刚刚用 PuTTYGen 转换后的私钥。
(6) 然后点击左侧的 Session,回到主机连接信息的设置,填写余下的主机信息,
并保存(可参考 任务 2)最后点击“Open”登录。
(7) 在弹出的登录窗口中输入的用户名, 注意,在输入完用户名后,不会出现用
户密码输入提示,因为在 SSH 服务器配置中我们禁止了用户通过用户密码
方式的 SSH 登录。这时候会出现要求输入私钥口令的提示,这个口令就是
在服务器端建立相应用户(stu)的私钥的时候设置的口令。输入私钥口令,
使用私钥进行登录。如下:
(8) 输入正确私钥口令后, 成功联机!
但作为管理员, 可以通过此用户远程登录到主机,然后再用“su”命令获得
root 权限,对系统进行配置