Linux 学习笔记-5 Win10 中如何使用 SSH 密钥实现免密码登录 Linux 服务器

1. 生成 SSH 密钥对

第一步是先在客户端,也就是要登录服务器的电脑上生成 SSH 密钥对。得到两个文件:

  • 私钥文件:id_rsa
  • 公钥文件:id_rsa.pub

具体方法参见上篇笔记:Linux 学习笔记-4 在 Win10 中生成 SSH 密钥的方法。

2. 将公钥复制到 Linux 远程服务器

创建好密钥对以后,我们需要将公钥上传到远程服务器上,以便用于 SSH 密钥认证登录。切记,千万不要将私钥上传,私钥应该保存在本地。如果把私钥和公钥都上传到服务器,就相当于把锁和钥匙都放一起了。

执行以下命令,将公钥复制到 Linux 远程服务器。其中 替换为登录远程服务器的用户名, 替换为远程服务器的 ip 地址:

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh @ "cat >> .ssh/authorized_keys"

过程中会提示输入用户在远程服务器上的密码,输入密码回车即可完成:

The authenticity of host ' ()' can't be established.
ECDSA key fingerprint is SHA256:*************************************.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '' (ECDSA) to the list of known hosts.
@'s password:

3. 测试是否设置成功

在本机的命令行中执行如下命令:

ssh @

如果不需要输入密码就表示设置成功了。

4. 在服务器上禁用密码身份验证

至此,基于 SSH 密钥的免密码身份验证就设置成功了。在确保前述远程服务器的用户具有 sudo 权限的前提下,为了提高服务器的安全性,现在可以禁止 SSH 客户端使用密码访问,而仅允许使用 SSH密钥登录服务器。

在命令行中执行以下命令,用 nano 编辑器打开配置文件: sshd_config

sudo nano /etc/ssh/sshd_config

找到 PasswordAuthentication ,把后面的值 yes 改为 no。另外,如果该行的前面有 #,需要把 # 去掉。按 Ctrl+X 退出 nano 编辑器,会显示提示 Save modified buffer?,输入 Y 保存修改,最后回车即可成功退出编辑器。

此时的设置还未生效,需要重启 sshd 服务才可以:

sudo systemctl restart ssh

现在,远程服务器就只允许通过 SSH 密钥登录了。尝试使用密码登录的时候都会被拒绝。

你可能感兴趣的:(Linux 学习笔记-5 Win10 中如何使用 SSH 密钥实现免密码登录 Linux 服务器)