服务器 | IP |
---|---|
本地服务器-hostA | 192.168.38.10 |
远程服务器-hostB | 192.168.38.20 |
?ssh-keygen
命令生成密钥,-t
用于指定密钥的加密算法,一般可使用 DSA
或 RSA
算法。ssh-keygen默认使用rsa密钥,所以不加-t rsa也行。
# ssh-keygen 命令用于生成密钥对时,一直回车键即可
[root@hostA ~]# 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:
SHA256:keBNoGBCj0QdHoXVpE1vAIgdovrWuOkpza46XjDtpO8 root@hostname
The key's randomart image is:
+---[RSA 2048]----+
|+=*+B+*=. |
|o+=*.o+=o. |
|.. o....+o |
|. . .. |
|.o o S |
| .*o |
| ++o. |
|o.=+ |
|=BBE |
+----[SHA256]-----+
# 用户的~/.ssh目录下会生成id_rsa私钥和id_rsa.pub公钥文件
[root@hostA ~]# ll ~/.ssh
-rw------- 1 root root 1675 Jan 12 09:52 id_rsa
-rw-r--r-- 1 root root 395 Jan 12 09:52 id_rsa.pub
# ssh-keygen -t rsa -C "123456@qq.com" -f ~/.ssh/test/crm-git -t 表示密钥的类型 -b 表示密钥的长度 -f 表示密钥的存放位置路径 -C 用于识别这个密钥的注释 ,这个注释可以输入任何内容(邮箱),很多网站和软件用这个注释作为密钥的名字
# 将公钥保存到远程服务器的~/.ssh/authorized_keys文件中
# 【方法一:】
[root@hostA ~]# ssh root@192.168.38.20 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
# 【方法二:】
[root@hostA ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.38.20
?远程服务器hostB的~/.ssh/目录:
[root@hostB ~]# ll ~/.ssh/
-rw-r--r-- 1 root root 406 Jan 12 09:54 authorized_keys
?此时就可以ssh免密登陆远程服务器了:
[root@hostA ~]# ssh root@192.168.38.20
?如果私钥文件保存在其他目录,可以使用 -i
参数指定私钥文件的目录及文件名:
[root@hostA ~]# mv .ssh/id_rsa ~/testpath/id_rsa_test
[root@hostA ~]# ssh root@192.168.38.20 -i ~/testpath/id_rsa_test
?使用私钥登陆时需要注意,私钥文件与远程服务器中的authorized_keys文件的权限都必须为600,否则会登陆出错!
?在默认情况下,公钥文件的命名应该是 authorized_keys
,并且位于远程服务器的 .ssh
目录中。
?实际上,可以通过修改 /etc/ssh/sshd_config
文件的AuthorizedKeysFile
来指定公钥路径及文件名。当然,也需要把公钥文件移动到更新后的路径。
[root@hostB ~]# vi /etc/ssh/sshd_config
...
AuthorizedKeysFile .ssh/authorized_keys
?修改配置文件后,需重新启动 SSH 服务器使配置生效。
?使用私钥登陆时需要注意,私钥文件与远程服务器中的authorized_keys文件的权限都必须为600,否则会登陆出错!