首先使用 ssh-keygen 来生成密钥,将会生成两个文件:id_gitid_git.pub

    1. $ ssh-keygen -t rsa -P "" -f ~/.ssh/id_git
    2. $ cat ~/.ssh/id_git.pub >> ~/.ssh/authorized_keys
    3. $ tree -l
    4. .
    5. ├── authorized_keys
    6. ├── id_git
    7. ├── id_git.pub
    8. └── known_hosts
    9. 0 directories, 4 files
    10. $ ls -la
    11. -rw-------. 1 yumingmin yumingmin 401 7 15 11:40 authorized_keys
    12. -rw-------. 1 yumingmin yumingmin 1675 7 15 11:29 id_git
    13. -rw-r--r--. 1 yumingmin yumingmin 401 7 15 11:29 id_git.pub
    14. -rw-r--r--. 1 yumingmin yumingmin 171 7 15 11:40 known_hosts
    15. $ ssh localhost

    :::warning ⚠️ 注意

    • .ssh 文件夹权限必须为 700
    • authorized_keys 文件权限必须为 600 :::

    修改 /etc/ssh/sshd_config 文件后,重启 SSH 服务:

    1. StrictModes no
    2. RSAAuthentication yes
    3. PubkeyAuthentication yes
    4. AuthorizedKeysFile .ssh/authorized_keys

    但是很多时候按照上述配置后,执行 ssh localhost 每次还是需要输入密码(尽管我以前这么配置都是可以的),还需要完成以下步骤:

    1. $ sudo service ssh restart
    2. $ ssh-agent zsh # zsh 可以改为 bash
    3. $ ssh-add ~/.ssh/id_git
    4. Identity added: /home/yumingmin/.ssh/id_git (/home/yumingmin/.ssh/id_git)
    5. $ ssh localhost

    再次执行 ssh localhost 之后,就不再需要密码了。