Unix/Linux 系统自动化管理 远程登录篇(2)
- UID
- 1066743
|
Unix/Linux 系统自动化管理 远程登录篇(2)
基于 SSH 交换 Key 自动化登录SSH 证书简介
SSH 证书使用一对密钥 : 私钥(private key)和公钥 (public key)。公钥(public key)对数据进行加密而且只能用于加密,私钥(private key)只能对所匹配的公钥(public key)加密过的数据进行解密。私钥(private key)只保存你独有的一些秘密信息。SSH 客户端用其向 SSHD 服务器证明自已的身份。公钥是公开的,可以随便将其放入 SSHD 服务器上自已的帐号中 , 在认证时,进行私钥和公钥协商,如果匹配,那么身份就得以证明,认证就成功。
目前所有的 OpenSSH 版本都应该既能使用 RSA 密钥又能使用 DSA 密钥。RSA 密钥和 DSA 密钥的生成命令和使用方法相同,本文仅介绍 RSA。
如果采用 SSH 密钥认证的方式实现自动化登录,用户可以参考下面的章节。
生成密钥对
ssh-keygen 程序生成的 RSA 密钥的文件名默认为 id_rsa 和 id_rsa.pub,用户也可以将其更改为别的名称。下面”清单 3. 生成密钥对”的操作过程将采用系统的默认值。
清单3. 生成密钥对
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| [root@redhat ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <--- 可以不输入密码
Enter same passphrase again: <--- 可以不输入密码
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
4b:70:20:de:89:92:a9:fe:21:a4:9b:7c:6b:65:ae:e0 root@redhat
[root@redhat ~]# ls -al .ssh
total 20
drwx------ 2 root root 4096 May 10 02:51 .
drwxr-x--- 11 root root 4096 May 10 02:51 ..
-rw------- 1 root root 1675 May 10 02:51 id_rsa
-rw-r--r-- 1 root root 397 May 10 02:51 id_rsa.pub
|
如果 ssh 目录不存在,程序为自动创建本地 SSH 目录 ~/.ssh,并将所生成的密钥分成两个文件存储,私钥为 id_rsa,公钥为 id_rsa.pub。
配置自动化登录
在配置自动化登录的过程中,账户对应的公钥需要被添加到 SSHD 服务器端的配置文件。在 3.0 版本的 OPENSSH 中,用户需要修改的文件为 authorized_keys,早于 3.0 的版本则使用 authorized_keys2 文件。将在客户端生成的 id_rsa.pub 文件内容加入到 authorized_keys 或者 authorized_keys2 文件中即可完成配置工作。
为安全起见,要确保 $HOME/.ssh 目录的安全,只有所有者才有 权写入。如果远程用户的 SSH 配置文件的权限设置不当,服务器可能会拒绝进行认证。
下面是配置自动化登录的具体过程,其场景如下:
Openssh 为 OpenSSH_4.3p2SSH,将以 root 用户登录到 SSHD 服务器(192.168.0.4)上,因此公钥的内容将存放在 root/.ssh/authorized_keys。
清单4. 终端操作记录
1
2
3
4
| [root@redhat ~]# scp /root/.ssh/id_rsa.pub root@192.168.0.4:/tmp
[root@redhat .ssh]# ssh 192.168.0.4
root@192.168.0.4's password: ******
[root@server ~]# cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
|
如果用户在生成 rsa 和 id_rsa.pub 的时候没有输入密码,可以直接使用“ssh root@192.168.0.4”登录,而不用输入密码。
而如果用户在生成 rsa 和 id_rsa.pub 的时候输入了密码,需要进行以下两步操作:
清单5. 终端操作记录
1
| [root@redhat ~]# ssh-agent $SHELL
|
(2) 使用 ssh-add, 装入私钥,并输入生成 rsa 和 id_rsa.pub 时输入的密码
清单6. 终端操作记录
1
2
3
4
5
6
| [root@redhat ~]# ssh-add
Enter passphrase for /root/.ssh/id_rsa:
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
Identity added: /root/.ssh/id_dsa (/root/.ssh/id_dsa)
[root@redhat ~]# ssh 192.168.0.4
Last login: Sat May 16 11:37:39 2009 from redhat
|
把私钥保存在内存中,为认证提供服务,之后以 root 用户 ssh 登录时,就不用重复输入密码。其生命周期为 ssh-agent 启动的那个 shell,当用户退出该 shell 时,需要重新执行 ssh-agent 和 ssh-add。
只要密钥配置好,以后登录就是自动化了。因此本部分登录过程不需要用脚本来实现,实现了前期拷贝 SSH key 到远程服务器,并添加到相应的位置,并测试自动登录是否成功。 |
|
|
|
|
|