ssh密钥大概介绍
1、密钥在哪里生成(客户端/服务器)?
客户端/服务器都可以生成,但是要考虑传输方便和安全问题
根据自己的使用情况
、密钥传输
,怎么方便怎么来,
- 一对一:一台PC连接一台Linux服务器,我喜欢在PC上生成,在传密钥给Linux。你也可以在Linux生成然后传回来
- 一对多:如果一台PC访问多台Linux服务器,就在PC上生成密钥对,这样就可以使用同一密钥对访问所有服务器。
- 多对一:如果一台Linux服务器,多个PC端需要连接这台服务器,那么你可以在这台Linux服务器上生成密钥对。
- 多对多:拆分成一对多 噜噜噜~~
2、密钥生成是什么样子的?
ssh (生成密钥、密钥传输、配置连接、连接服务)过程
1、生成密钥
这里我用测试的Linux服务器来演示,每次生成会产生一个公钥和一个私钥,两个密钥是一对相互关联组成的
公钥(public key):公钥用于加密数据或验证签名,一般存储在远程服务器上进行身份验证。
私钥(private key):私钥用于解密数据或生成数字签名,一般存储在PC端进行连接,并且必须严格保密。
ssh-keygen
命令有多个可选选项,其中一些常用选项包括:
- -t:指定要生成的密钥类型,如 rsa、dsa、ecdsa、ed25519 等。
- -b:指定生成密钥的位数,通常用于RSA密钥,如 -b 2048。
- -C:在生成密钥时添加注释,可用于识别密钥的用途或所有者。
- -f:指定生成密钥的文件路径和名称。
- -N:设置用于保护私钥的密码,可以为空。
- -q:静默模式,减少输出信息。
- -y:从私钥中提取公钥并打印到标准输出。
- -h:显示命令的使用帮助信息。
输入下面命令就会生成(公钥和私钥)
ssh-keygen
最终生成完是这样的👇
C:\Users\17569\Desktop\ssh>ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\17569/.ssh/id_rsa): 47.95.178.146
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in 47.95.178.146.
Your public key has been saved in 47.95.178.146.pub.
The key fingerprint is:
SHA256:ST7ke0dkXzI5UvM1KKqEABT39KTRs239D70eyTlYWmg 17569@xk-Lenovo
The key's randomart image is:
+---[RSA 3072]----+
|.+o. o.. +..|
| ..o =o . o +o|
| .o..* o = = o|
| . B = + o.= |
| . S oEoo |
| . o ..o*.o|
| . . .oo*.|
| . . oo|
| .. |
+----[SHA256]-----+
C:\Users\17569\Desktop\ssh>
可能看到一些提示,如果没有就跳过
提示一:输入保存密钥的文件:Enter file in which to save the key
让我们输入生成密钥的名称,我这里输入我的服务器IP方便记住
Enter file in which to save the key (C:\Users\17569/.ssh/id_rsa): 47.95.178.146
翻译:
输入保存密钥的文件(C:\Users\17569/.ssh/id_rsa): 47.95.178.146
提示二、输入密码短语:Enter passphrase (empty for no passphrase)
让我们输入密码短语以增加安全性,也可以直接按回车键跳过密码短语,输入密码短语是不显示字符的哦
不建议输入,如果输入密码短语,每次使用密钥连接都需要在输入密码短语确认
不建议输入,如果输入密码短语,每次使用密钥连接都需要在输入密码短语确认
不建议输入,如果输入密码短语,每次使用密钥连接都需要在输入密码短语确认
Enter passphrase (empty for no passphrase):
翻译:
输入密码短语(空表示无密码短语):
1.3、生成密钥提示:Enter same passphrase again
输入两次,确保密码短语是正确的,在操作中输入不一致就提示:密码不匹配。再试一次。
Enter same passphrase again:
翻译:
再次输入相同的密码:
1.4、生成密钥提示:Passphrases do not match. Try again
输入两次密码短语是错误的,注意大小写和数字键盘是否开启
Passphrases do not match. Try again.
翻译:
密码不匹配。再试一次。
2、密钥传输
生成后在执行的当前目录下会生成两个文件
默认路径如下:
- windows电脑对应的路径为:C:\Users\你的用户名.ssh
- MAC/linux对应的路径为:~/.ssh
生成的密钥对有两个文件:id_rsa(私钥文件)和 id_rsa.pub(公钥文件)
私钥:47.95.178.146
公钥:47.95.178.146.pub
公钥(public key):公钥用于加密数据或验证签名,一般存储在远程服务器上进行身份验证。
私钥(private key):私钥用于解密数据或生成数字签名,一般存储在PC端进行连接,并且必须严格保密。
方法一:使用 SSH 拷贝公钥到远程服务器(适用于Mac、Linux电脑)
1.使用以下命令将本地公钥复制到远程服务器:
然后会要求你输入密码,就会将公钥自动添加到远程服务器的 ~/.ssh/authorized_keys 文件中
ssh-copy-id 连接用户名@服务器ip
2.如果你的服务器端口不是默认的 22 端口,可以使用 -p 参数指定端口号:
ssh-copy-id -p 28256 连接用户名@服务器ip
方法二:手动上传公钥到服务器(适用于Windows、Mac及linux电脑)
1.使用 scp 命令传输密钥
这样也可以把 复制到远程服务器的 ~/.ssh/authorized_keys 文件中。
scp 公钥文件名.pub 连接用户名@服务器ip:~/.ssh/authorized_keys
示例:
scp 47.95.178.146.pub root@47.95.178.146:~/.ssh/authorized_keys
成功如下👇
C:\Users\17569\Desktop\ssh>scp 47.95.178.146.pub root@47.95.178.146:~/.ssh/authorized_keys
root@47.95.178.146's password: [此处输入密码,密码已隐藏]
47.95.178.146.pub 100% 570 9.3KB/s 00:00
C:\Users\17569\Desktop\ssh>
3、配置连接
检查一:linux服务端:是否开启密钥连接
使用下面命令检查是否开启密钥连接,如果没有或者前面有个#都不行
cat /etc/ssh/sshd_config | grep PubkeyAuthentication
情况1:【空白】
使用vim写入
情况2:PubkeyAuthentication no
使用 vim 改成 yes
情况3:#PubkeyAuthentication yes
使用 vim 去除 “#” 号
正确情况如下👇
[root@iZ2ze56a8gwg4w4scwap4qZ ~]# cat /etc/ssh/sshd_config | grep PubkeyAuthentication
PubkeyAuthentication yes
[root@iZ2ze56a8gwg4w4scwap4qZ ~]#
检查二:linux服务端:公钥文件位置是否正确
使用下面命令检查是否开启密钥连接
cat /etc/ssh/sshd_config | grep AuthorizedKeysFile
情况1:【空白】
使用vim写入
情况2:AuthorizedKeysFile
使用 vim 添加路径 .ssh/authorized_keys
情况3:#AuthorizedKeysFile .ssh/authorized_keys
使用 vim 去除 “#” 号
情况4:AuthorizedKeysFile .ssh/abcdef/authorized_keys
使用 vim 修改文件里面的路径 或者 把密钥文件移动位置
正确情况如下👇
[root@iZ2ze56a8gwg4w4scwap4qZ ~]# cat /etc/ssh/sshd_config | grep AuthorizedKeysFile
AuthorizedKeysFile .ssh/authorized_keys
[root@iZ2ze56a8gwg4w4scwap4qZ ~]#
(可选)配置一:PC服务端:快速连接
打开目录:C:\Users\你的用户名.ssh
创建一个文件:config,下面是内容👇
Host 连接名称
HostName 服务器ip
User 连接用户名
IdentityFile ~/.ssh/id_rsa[密钥位置]
Port 22
示例:
Host al
HostName 47.95.178.146
User root
IdentityFile ~/.ssh/al
Port 22
3、连接服务
方法一:使用ssh -i 密钥连接
ssh -i 密钥文件位置 连接用户名@服务器ip
示例:
ssh -i id_rsa root@47.95.178.146
连接示例:
C:\Users\17569\Desktop\ssh>ssh -i 47.95.178.146 root@47.95.178.146
Welcome to XiaoKang's world!
Last login: Fri May 31 23:30:10 2024 from 116.249.141.191
[root@iZ2ze56a8gwg4w4scwap4qZ ~]#
方法一:使用ssh config快速连接
使用在 “config” 文件中配置的连接名称直接连接
ssh 连接名称
示例:
ssh al
连接示例:
C:\Users\17569\Desktop\ssh>ssh al
Welcome to XiaoKang's world!
Last login: Fri May 31 23:54:52 2024 from 116.249.141.191
[root@iZ2ze56a8gwg4w4scwap4qZ ~]#
参考原文链接:https://blog.csdn.net/qq_41308872/article/details/138306315