首先明确一点,一对密钥分为私钥和公钥,私钥是你自己留着的,公钥是放在远程主机的。密钥对通过ssh-keygen
创建的,在哪台主机创建的无所谓,你可以将公钥放到任意你想登陆的服务器上,也可以把私钥放到任意需要登陆的客户机上。
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
阮一峰的网络日志,SSH原理与运用(一):远程登录
现在使用ssh-keygen
生成一对密钥
ssh-keygen -C '注释'
# 得到的私钥格式如下
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
此处略去很多行
e3xx+VmdxnJvEAAAAbcm9vdEB2bS0yMWItMHF1MWsubm92YWxvY2Fs
-----END OPENSSH PRIVATE KEY-----
# 得到的公钥格式如下
ssh-rsa AAAAB3NzaC1 此处略去很多字 l2cdGl5iArE= '注释'
使用ssh-copy-id
将公钥发送到指定的主机上
ssh-copy-id [-i '公钥文件'] user@host
在目标主机的~/.ssh/authorized_keys
中会添加刚刚发送来的公钥。
这样就可以实现免密登陆了。
ssh-agent
Linux 使用ssh-agent来管理密钥,使用ssh-keygen
生成之后会自动添加到ssh-agent,也可以通过ssh-add 私钥
来添加,通过以下命令操作
# 查看所有公钥
ssh-add -L
# 查看所有密钥
ssh-add -l
# 删除指定的密钥, 删除时如果私钥文件还存在,会拒绝删除,可以用rm先将密钥文件删除。
ssh-add -d
# 删除所有密钥
ssh-add -D
-----BEGIN OPENSSH [PRIVATE, RSA]KEY-----
有些程序点名需要-----BEGIN OPENSSH RSA KEY-----
现在使用命令 ssh-keygen -t rsa 生成ssh,默认是以新的格式生成,id_rsa的第一行变成了“BEGIN OPENSSH PRIVATE KEY” 而不在是“BEGIN RSA PRIVATE KEY”
lsp84ch80@CSDN
可以使用以下命令生成
ssh-keygen -m PEM -t rsa -b 4096
重启
## ubuntu
service sshd restart
## centos
systemctl restart sshd.service
网友评论