使用密钥登录linux

1.生成密钥

两种方法生成密钥)

0.服务器安装文件上传下载程序

1
sudo apt install lrzsz

1命令行生成

首先,在本地机器上生成一个 ed25519 类型的 SSH 密钥对。在终端(Win上的PowerShell、CMD或WSL,Mac上的Terminal)执行以下命令:

1
2
3
4
#切换到密钥目录,例如
cd /root/.ssh
#生成密钥
ssh-keygen -t ed25519 -C "your_email"
  • -t ed25519 指定生成 ed25519 密钥。
  • -C 用于添加一个注释,通常使用电子邮件或用户名。

系统会提示你选择密钥存储的位置&私钥密码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
root@debian01:~/.ssh# ssh-keygen -t ed25519 -C "your_email"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
Enter passphrase for "/root/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:KXcPqFtcsujafMwgSD2rCmL5jgR6gsZfQ3bc0yZ+Xl0 your_email@example.com
The key's randomart image is:
+--[ED25519 256]--+
| |
| |
| . |
| . o . .o. |
|.. . =.oS++o E|
|= o = o*.=+o . .|
|**.. +o++. ... . |
|*o= .+.o+ o . |
|.o.+..=. . |
+----[SHA256]-----+

你可以直接按回车选择默认位置,也可以指定一个不同的文件名。接着会要求输入一个密码来保护私钥(可以选择为空)。

将公钥复制到目标服务器的 ~/.ssh/authorized_keys 文件中

1
2
3
rz -y #上传公钥

cat id_ed25519.pub >>authorized_keys #导入公钥

检查一下

1
cat authorized_keys

授权

1
2
chmod 600 authorized_keys
chmod 700 ~/.ssh
导入私钥

工具-》用户密钥管理者

image-20250908214821164

选择你的私钥,输入密码

image-20250908214753477

注意检查这里账户·是否正确

image-20250908215334785

如果使用其他用户名会出现问题

image-20250908215653188

2.本地生成

打开Xshell,在菜单栏点击“工具”,在弹出的菜单中选择“(新建用户密钥生成向导)”。

弹出“新建用户秘钥生成向导”对话框,在“秘钥类型”项选择“RSA”公钥加密算法,“秘钥长度”选择任意密钥长度,长度越长,安全性越高,如下图:

image-20250908212207901

点击“下一步”,等待密钥生成

image-20250908212300917

继续下一步,在“秘钥名称”中输入Key的文件名称,我这里为“id_rsa_2048”;在“加密密码”处输入一个密码用于加密私钥,并再次输入密码确认,如下图:

image-20250908212337175

点击“下一步”,密钥生成完毕(Public key Format选择SSH2-OpenSSH格式),这里显示的是公钥,我们可以复制公钥然后再保存,也可以直接保存公钥为文件。

image-20250908212409519

当然,稍后在属性中也可以保存公钥

image-20250908212604331

公钥保存完后,接下来为私钥文件。点击“导出”,导出为私钥文件——用来打开刚才的公钥。请妥善保管。

image-20250908212817262

注意:公钥有.pub后缀,私钥没有。

上传公钥

1
rz -y

在弹出的窗口中选择要上传的公钥

将公钥复制到目标服务器的 ~/.ssh/authorized_keys 文件中

1
cat  id_ed25519.pub >>authorized_keys

检查一下

1
cat authorized_keys

授权

1
chmod 600 authorized_keys

修改ssh设置

修改/etc/ssh/sshd_config 配置文件

  1. 确保以下行未被注释掉,并设置为 yes
1
2
PubkeyAuthentication yes # yes表示允许密钥登陆
AuthorizedKeysFile /root/.ssh/authorized_keys .ssh/authorized_keys2 # 可以指定密钥的文件位置,默认值会自动搜索。
  1. 保存文件并退出编辑器(在 nano 中按 CTRL + X,然后按 Y 保存更改)。

重新启动 SSH 服务

修改配置文件后,需要重新启动 SSH 服务以使更改生效:

1
sudo systemctl restart ssh

最后

可以尝试关闭SSH 密码登录/修改登录端口

找到#Port 22

取消注释并修改端口号。

打开 /etc/ssh/sshd_config 配置文件,查找以下两行并修改或确保它们如下所示:

1
2
PasswordAuthentication no # 不允许使用密码登陆。切记:只能在测试密钥登录成功后再改为 no!
ChallengeResponseAuthentication no`

禁用密码认证和挑战响应认证。
重新启动 SSH 服务

如果你想其他的账户也使用密钥登录

su ***切换到那个账户

cd ~\\.ssh

然后就可以和root账户一样

但是最后还是要使用root权限重启ssh