使用用户账号进行 ssh 连接认证有密码被泄露的风险,为了规避这个风险,可以使用密钥的方式进行身份认证。使用密钥就需要将公钥添加到服务器,我们今天介绍一下如何将公钥添加到服务器。
我们假设大家了解 ssh 的基本概念,且在 Linux 服务器上已经启动了 ssh,个人计算机上已经生成了 ssh 密钥。现在需要做的就是将公钥上传到服务器的授权密钥,这样就可以不需要账号密码来访问服务器了。
前置条件
在正式开始介绍之前,我们需要准备的东西如下:
1)目标服务器已经启用 ssh;
2)已经生成了公钥和私钥(使用命令 ssh-keygen -t rsa);
3)在服务器上有可用的账户(用户名和密码,root 也可以);
4)知道服务器的 IP 地址。
满足上述四个条件后,接下来我们就来看看如何使用公钥身份认证。
方法1:自动将ssh密钥复制到服务器
第一种方法是用户将其个人计算机的公钥复制到远程服务器上的授权密钥列表中。
这里,我假设你能够使用 ssh 登录到远程服务器 user_name@ip_of_server,它会询问你的帐户密码,然后您进入服务器。
如果你将公钥添加到服务器,那么就应该可以在不输入密码的情况下登录。
OpenSSH 提供了一个称为 ssh-copy-id 的工具,用于将 ssh 公钥复制到远程系统,它还可以创建所需的目录和文件。如下命令:
出现系统提示时,输入远程服务器上用户帐户的密码,公钥就会自动复制到远程服务器上的相应文件夹中。
上述命令中有个路径:~/.ssh/id_rsa.pu,这是 ssh 公钥的默认位置,大家需要根据自己实际情况修改这个路径。
方法2:手动将 ssh 公钥添加到服务器
第一种方法在用户端执行操作。假设你是系统管理员,你的服务器不允许通过密码进行 ssh 登录,那么访问服务器的唯一方法是使用 ssh 公钥身份验证。
在这种情况下,你可以要求最终用户提供其公钥。现在,你可以做的是创建 .ssh/authorized_keys 目录,然后在这里复制公钥。
步骤1:获取公钥
键入如下命令,要求用户提供公钥:
它将显示一个以 ssh-rsa 开头的长字符串:
你可以通过电子邮件或即时消息工具来获取上述文本。
步骤2:在用户的主目录中创建ssh目录(作为sysadmin)
注意,你必须在最终用户的主目录中创建这些新目录和文件,而不是你的主目录(root/sysadmin)。
然后使用文本编辑器(比如 vim)打开这个文件 /home/user_name/.ssh/authorized_keys,并在此处添加用户公钥:
保存并关闭。
步骤3:为文件设置权限
然后我们需要为文件设置适当的权限,否则回看到类似 Permission denied (publickey) 的报错信息。
首先,确保设置正确的文件权限:
由于我们使用 root 或我们自己的管理员帐户为其他用户创建了这些文件,所以需要更改用户的所有权:
这样就完成了,可以让最终用户尝试登录一下了。