ssh-keygen实现免密码登陆

  • 在 Client 端建立 Public 与 Private Key :
    建立的方法真的是简单到不行!直接在 192.168.0.100 这个 Client 上面,以 test2 这个账号,使用 ssh-keygen 这个指令来进行 Key 的产生即可!不过,需要注意的是, version 1 与 version 2 使用的密码演算方式不同,此外, version 2 提供两个密码演算的方法,我们这里仅针对 version 2 的 RSA 这个演算方法进行说明!

[test2@test2 test2]$ ssh-keygen -t rsa  <==这个步骤在产生 Keys
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test2/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): <==这里按 Enter
Enter same passphrase again:            <==再按一次 Enter
Your identification has been saved in /home/test2/.ssh/id_rsa. <==这是私钥
Your public key has been saved in /home/test2/.ssh/id_rsa.pub.<==这是公钥
The key fingerprint is:
c4:ae:d9:02:d1:ba:06:5d:07:e6:92:e6:6a:c8:14:ba test2@test2.linux.org
注意: -t 指的是『使用何种密码演算方式?』由于我们使用 RSA ,
所以直接输入 -t rsa 即可建立两支 Keys !
此外,建立的两把 Keys 都放置在家目录下的 .ssh 这个目录中!
察看一下这两把 Keys 吧!

[test2 @test2 test2]$ ll ~/.ssh
total 12
-rw-------    1 test2    test2         887 Nov 12 22:36 id_rsa
-rw-r--r--    1 test2    test2         233 Nov 12 22:36 id_rsa.pub
-rw-r--r--    1 test2    test2         222 Oct 31 11:20 known_hosts

  • 请注意上面喔,我的身份是 test2 ,所以当我执行 ssh-keygen 时,才会在我的家目录底下的 .ssh/ 这个目录里面产生所需要的两把 Keys ,分别是私钥(id_rsa)与公钥(id_rsa.pub)。另外一个要特别注意的就是那个 id_rsa 的档案权限啦!他必须要是 -rw------- 才好!否则内容被人家知道了,那么您的 Keys 不就有可能外泄了?所以请特别留意他的权限喔!那么那个 id_rsa.pub 则是『公钥!』这个档案必须要被放置到 Server 端才行!
     
  • 在 Client 端放置私钥:
    在预设的条件中,我们的私钥必需要放置在家目录底下的 .ssh 里面,那么如果是 version 2 的 RSA 算法,就需要放置在 $HOME/.ssh/id_rsa 当中!咦!刚好使用 ssh-keygen 就是已经产生在这个目录下了,所以自然就不需要去调整他了!以我的 test2.linux.org 来看,那么我的档案就会放置在 /home/test2/.ssh/id_rsa 这个档案就是私钥啦!
     
  • 在 Server 端放置可以登入的公钥:
    既然我们要让 test2 可以以 test 这个账号登入 test.linux.org 这部主机,那么这部主机自然需要保有 test2 的 public key 啰!对的!所以我们必需要将 Client 端建立的 id_rsa.pub 档案给他拷贝到 test.linux.org 里头的 test 这个使用者的家目录之下!那么如果您还记得上面的 sshd_config 这个档案的设定的话,那么应该就记得『AuthorizedKeysFile』这个设定吧!是的!在被登入的主机的某个账号,他的公钥放置的文件名称预设就是这个项目所记载的!而他预设的档名就是 authorized_keys 这个文件名称啦!那么应该怎么做呢?

1. 先在 Client 端以 sftp 将公钥丢到 test 上面去!
[test2@test2 test2]$ cd ~/.ssh             <==切换目录
[test2@test2 .ssh]$ sftp test@test.linux.org<==连到主机上面
Connecting to test.linux.org...
test@test.linux.org's password:                <==输入 test 的密码
sftp> put id_rsa.pub                        <==将公钥丢到 Server 上面去!
Uploading id_rsa.pub to /home/test/id_rsa.pub
sftp> exit

2. 到 Server 上面,将公钥转存到 authorized_keys 档案中!
[test@test test]$ cd ~/.ssh
[test@test .ssh]$ cat ../id_rsa.pub >> authorized_keys

  • 请注意上面的机器!由于 authorized_keys 可以保存相当多的公钥内容,因此,可以使用 >> 的方式来将 Client 端的公钥新增到该档案内!呵呵!做完这一步一后,未来 test2 就可以直接在 test2.linux.org 以

[test2@test2 test2]$ ssh test@test.linux.org

  • 这样就可以不需要输入密码啰!但是请注意, test 不能以 test2 登入 test2.linux.org 喔!

很简单的步骤吧!这样一来,就可以不需密码的手续了!无论如何,您要记得的是, Server 需要有的是 Public Keys ,而 Client 端的则是 Private Keys !则未来,当您还想要登入其它的主机时,只要将您的 public key ( 就是 id_rsa.pub 这个档案 )给他 copy 到其它主机上面去,并且新增到某账号的 .ssh/authorized_keys 这个档案中!哈哈!成功!

原文地址:https://www.cnblogs.com/hdk1993/p/4355572.html