SSH使用RSA公钥配置免密码登录

1. 在本地生成密钥对

用ssh-keygen用于生成密钥对,不加任何参数调用即可:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user/.ssh/id_rsa):
 ls ~/.ssh/id_rsa检查下以前是否生成过,避免覆盖,如果生成过,请输入新的文件名 ,否则直接回车就行

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/user/.ssh/id_rsa.abc
Your public key has been saved in /home/user/.ssh/id_rsa.abc.pub.
The key fingerprint is:
8a:77:ec:a1:77:42:8d:5d:ab:17:33:ac:87:06:20:3c user@mbp101
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|   .             |
|    E .     .    |
|     o .S+ o .   |
|     . o+ o *    |
|    . o.+. + +   |
|     . +o.* o    |
|      ...+ o     |
+-----------------+

如果你不想每次连接时都被问及密码(它是用来解开特定的公钥),在创建密钥对的时候,你只须按 enter 作为密码。创建密钥对时,是否以密码加密纯粹是你的决定。如何你不将密钥加密,任何人夺得你的本地机器后,便自动拥有远程服务器的 ssh 访问权。此外,本地机器上的 root 能够访问你的密钥:但假若你不能信任 root(或者 root 已被攻占),你已经大祸临头。将密钥加密舍弃了不用密码的 ssh 服务器,来换取额外的安全,得来的就是输入密码来使用这条密钥。

注意:若未使用默认的id_rsa,则需要额外配置~/.ssh/config,加入:

Host crm.abc.com
        User xxx
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa.abc

使ssh能正确查找到私钥,而且我为私钥设置了密码,在登录时keychain会弹出,输入后keychain会记住,不用每次都输入私钥保护密码。

2. 上传密钥

把你的公钥用scp或者sftp上传到了远程远程ssh服务器,并把公钥的内容追加到ssh服务器的 ~/.ssh/authorized_keys:

$ scp ~/.ssh/id_rsa.pub user@host:
$ ssh root@host
$ cat id_rsa.pub >> ~/.ssh/authorized_keys

3. ~/.ssh 相关文件权限

现在为本地的私钥设置权限:

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa

设置centos服务器上的文件权限:

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

如果 /etc/ssh/sshd_config 内的 StrictModes 被启用(缺省值),以上的权限是必须的。

4.一旦你检查过可以用密钥对来登录服务器,你可以在你的服务器的 /etc/ssh/sshd_conf 内加入以下设置来停用口令验证:
# 停用口令验证,强制使用密钥对

PasswordAuthentication no

重启sshd

# service sshd restart

这是换一台机器或者虚拟机进行登录,会提示以下

# ssh [email protected]
Permission denied,  (publickey,gssapi-keyex,gssapi-with-mic)


Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/user/.ssh/_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
8a:77:ec:a1:77:42:8d:5d:ab:17:33:ac:87:06:20:3c user@mbp101
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|   .             |
|    E .     .    |
|     o .S+ o .   |
|     . o+ o *    |
|    . o.+. + +   |
|     . +o.* o    |
|      ...+ o     |
+-----------------+

如果你不想每次连接时都被问及密码(它是用来解开特定的公钥),在创建密钥对的时候,你只须按 enter 作为密码。创建密钥对时,是否以密码加密纯粹是你的决定。如何你不将密钥加密,任何人夺得你的本地机器后,便自动拥有远程服务器的 ssh 访问权。此外,本地机器上的 root 能够访问你的密钥:但假若你不能信任 root(或者 root 已被攻占),你已经大祸临头。将密钥加密舍弃了不用密码的 ssh 服务器,来换取额外的安全,得来的就是输入密码来使用这条密钥。

注意:在这里我并没有默认使用id_rsa,因为我的id_rsa已经有了东西,所以我用了xxx_rsa,这里需要额外配置~/.ssh/config

加入

Host yongyao.li
        User xxx
        Hostname yongyao.li
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/yongyaoli_rsa

使ssh能正确查找到私钥,而且我为私钥设置了密码,在登录时的keychain会弹出,输入后keychain会记住,不用每次都输入私钥保护密码。

你可能感兴趣的:(ssh)