SSH 密钥免密登录备忘
首先明确一点,一对密钥分为私钥和公钥,私钥是你自己留着的,公钥是放在远程主机的。密钥对通过ssh-keygen创建的,在哪台主机创建的无所谓,你可以将公钥放到任意你想登陆的服务器上,也可以把私钥放到任意需要登陆的客户机上。
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
现在使用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 [-p PORT]
在目标主机的~/.ssh/authorized_keys中会添加刚刚发送来的公钥。
这样就可以实现免密登陆了。
ssh-agent
Linux 使用ssh-agent来管理密钥,使用ssh-keygen生成之后会自动添加到ssh-agent,也可以通过ssh-add 私钥来添加,通过以下命令操作
# 查看所有公钥
ssh-add -L
# 查看所有密钥
ssh-add -l
# 添加私钥
ssh-add id_rsa
# 删除指定的密钥, 删除时如果私钥文件还存在,会拒绝删除,可以用rm先将密钥文件删除。
ssh-add -d
# 删除所有密钥
ssh-add -D
OPENSSH 私钥 和 RSA(PEM)私钥区别
有些程序点名需要-----BEGIN RSA PRIVATE KEY-----
现在使用命令
ssh-keygen -t rsa生成ssh,高版本OpenSSH默认是以新的OPENSSH格式生成,id_rsa的第一行变成了BEGIN OPENSSH PRIVATE KEY,而不再是BEGIN RSA PRIVATE KEY
生成旧PEM(RSA)格式密钥命令:
ssh-keygen -m PEM -t rsa -b 4096
SSH服务重启
## ubuntu
service sshd restart
## centos
systemctl restart sshd.service
常见报错
- Could not open a connection to your authentication agent.
ssh-agent bash
- WARNING: UNPROTECTED PRIVATE KEY FILE!
chmod 700 PATH_TO_YOUR_KEY
一、简单对比
ssh-keygen -t rsa 生成ssh,高版本OpenSSH默认OPENSSH格式,两种格式头部不同。
OPENSSH加密格式
-----BEGIN OPENSSH PRIVATE KEY-----
xxxxxxxxxxx
-----END OPENSSH PRIVATE KEY-----
RSA(PEM)加密格式
-----BEGIN RSA PRIVATE KEY-----
xxxxxxxxxxx
-----END RSA PRIVATE KEY-----
二、如何生成RSA(PEM)格式私钥
ssh-keygen指定格式,使用 -m PEM 参数:
ssh-keygen -m PEM -t rsa -b 4096 -f /home/xxx/.ssh/demo
执行结果示例:
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/xxx/.ssh/demo
Your public key has been saved in /home/xxx/.ssh/demo.pub
The key fingerprint is:
SHA256:xxxx xxx@xxx
The key's randomart image is:
+---[RSA 4096]----+
| . + d = |
| ..+ . |
+----[SHA256]-----+
查看私钥文件格式:
cat ~/.ssh/demo
-----BEGIN RSA PRIVATE KEY-----
DXGGHTRFFDFAsDmHEcSRdAIj0kjdgu65sggsx4dPWaM0grptdn
xxx
xxx
xxx
ssh-keygen 参数说明
-m: 参数指定密钥的格式,PEM(也就是RSA旧格式)-b:指定密钥长度;-e:读取openssh的私钥或者公钥文件;-C:添加注释;-f:指定用来保存密钥的文件名;-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;-l:显示公钥文件的指纹数据;-N:提供一个新密语;-P:提供(旧)密语;-q:静默模式;-t:指定要创建的密钥类型
Windows 使用OPENSSH格式密钥兼容配置
如果配置了BEGIN OPENSSH PRIVATE KEY密钥,连接时报算法不支持,在.ssh目录新增config文件配置。
# c:/Users/用户名/.ssh/config
Host *
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa