基于密钥文件登入Linux服务器的配置

在日常工作中,经常需要链接Linux服务器进行操作,不论是普通的终端操作,亦或是通过scp命令将文件上传至服务器, 或从服务器下载。而在这一次次的服务器链接中,难免会需要输入密码进行登入,而对于那些繁杂的密码亦或者各种服务器地址, 我们往往会陷入抓狂。所以,这里就介绍一下如何使用密钥文件访问服务器终端。

本文中的约定以及配置概述

本文中以 客户主机 代表目前正在使用的计算机,而 线上服务器 代表你需要访问的服务器,user 是你访问 线上服务器 所使用的用户名。要通过 客户主机 访问 线上服务器 需要将 客户主机 的公钥文件上传至 线上服务器,从而达到通过 客户主机 访问 线上服务器 的目的。由于采用的是非对称加密,因此, 密钥文件分为公钥和私钥两部分组成。私钥及公钥可在任意一台可信的计算机上生成,但为了安全,建议在 客户主机 上生成。

密钥文件生成

密钥文件需要通过ssh-genkey命令生成,目前网上常见的文章采用的非对称算法为RSA,但实际上目前ssh能支持的非对称加密算法有, RSA,DSA,ECDSA,以及 ED25519。而目前从性能及强度来说,ED25519是比较好的选择,因此本文采用ED25519。

ssh-keygen -N "" -C "" -t ed25519 -f ssh_key

其中 ssh_key 为你密钥文件的名字,执行完后,会生成公钥文件 ssh_key.pub 以及私钥文件 ssh_key

线上服务器配置

将之前生成的 ssh_key.pub 文件上传至服务器的用户目录下,并将内容追加到 ~/.ssh/authorized_keys 文件中。 这个文件中可包含多个公钥,每个公钥需要新起一行。如果目录或文件不存在,可自行手动新建。

cat ~/ssh_key.pub >> ~/.ssh/authorized_keys

你可通过以上命令,将文件追加进 authorized_keys 文件中。

客户主机的配置

将之前生成的 ssh_key 重命名为 客户主机 中的 ~/.ssh/ssh_key 。并修改 ~/.ssh/config 文件, 如果该文件不存在自行新建。

# ~/.ssh/config
Host remote_server               # 自定义的服务器名称
    HostName 10.0.1.2            # 服务器的实际地址
    Port 22                      # SSH的端口号,一般为22。
    User user                    # 访问服务器的用户名
    IdentityFile ~/.ssh/ssh_key  # 之前生成的私钥文件

以上文件定义了一个名为 remote_server 的服务器,其IP地址为 10.0.1.2,SSH的端口号为22,采用user用户名及 ~/.ssh/ssh_key 对服务器进行访问。一个配置文件里,可存在多组服务器的配置。其中 remote_server 可根据情况自定义。

测试服务器访问

如果一切顺利,此时可在 客户主机 上,直接使用ssh访问 线上服务器

ssh remote_server             # 访问远程终端
scp file remote_server:~/file # 复制本地文件至远程服务器
scp remote_server:~/file file # 将远程服务器文件复制至本地

注意事项

至此,服务器的配置已基本完成了。这里,需要特别注意的一点是,ssh_key.pub公钥文件,可对外公开, 但 ssh_key私钥文件,注意绝对不要泄漏给不可信第三方。另外,从安全角度考虑,建议每台访问 线上服务器客户主机 分别生成密钥对,而不要共用一组。方便在某台 客户主机 出现问题后 (诸如丢失 ,损坏,台帐报废等)将其对应的访问权限移除出 线上服务器