免密登录
Linux也提供了ssh
客户端工具,以ssh
命令的形式存在,最常使用的格式是:ssh [<user>@]<hostname>
,但是这种登录方式每次都需要输入密码,而ssh
还提供了另一种免密登录方式,其原理如下:
machine1
要想免密登录machine2
首先要通过ssh-keygen
通过rsa
算法生成一对非对称加密的秘钥对(将保存在/root/.ssh
中):
hpms@hpms-1:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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:
34:c3:41:d2:1f:3d:67:75:63:72:40:d2:25:ff:80:90 root@xxh
The key's randomart image is:
+--[ RSA 2048]----+
| .oo .+o=o*o|
| o..E.+oO o|
| =. ..+.. |
| . o. ..|
| S .|
| |
| |
| |
| |
+-----------------+
这个passphrase设置为空,这是ssh免密码登陆的必须条件
生成后
hpms@hpms-1:~$ ll .ssh/
总用量 24
-rw------- 1 root root 1675 7月 8 22:32 id_rsa
-rw-r--r-- 1 root root 390 7月 8 22:32 id_rsa.pub
其中id_rsa.pub
称为公钥,id_rsa
称为私钥,公钥用来加密,私钥用来解密。公钥用来复制到要登录的目标主机的受信任列表authorized_keys
中,可以借助ssh-copy-id [<user>@]<hostname>
来完成:
hpms@hpms-1:~$ ssh-copy-id hpms@202.117.35.220
查看202.117.35.220
的受信任列表:
hpms@hpms-2:~$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDprJNzEdgG0ED1WmfyuRlShc2V++eHRBAY3lZOjLswlYNmdnzlm4m42da8Ao/XhtKv4+bsjWJaKMh6+ca0TNwc9phZvI04qwB0xx/cGdMc82kv83p5R8HScgnlrg3v4V9Vwq5r5utUwpCKdUb5FsDLdr6fSBoM+rb/bIceY7neoVW9B+ZAgzZjdR08d1ASblFjCSGy77qmXO2UmTtLEhtgQTZi1yLv2WwMsWq9gMUM9tRNoEnhz5GF0a+XHo9X8g4VjZmzKW6wAC4xUS9Z9iq0QEn7UEOzLmE26lKCds4fvfKVmerIwpvsIPqIcsOfZ8YvvcdnQgp8mcog7GTqeRfJ hpms@hpms-1
其中的表项就是由id_rsa.pub
中的内容和远程登录信息hpms@hpms-1
组成。以后当hpms-1
机器上的root
用户远程登录到hpms-2(202.117.35.220)
时,220
发现在自己的受信任列表中包含了hpms@hpms-1
于是会用这个表项对应的公钥加密一个随机字符串发送到企图连接到220
的机器上,如果该机器真的是hpms-1
而不是伪装的,那么它就能用自己的私钥将密文解密并返给220
,220
发现解密后的正确才会让其登录。因为每个主机的私钥唯一,因此只要自己不泄露,其他主机就无法伪装成hpms-1
登录220
。