基于密钥文件登入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 是私钥文件,注意绝对不要泄漏给不可信第三方。另外,从安全角度考虑,建议每台访问 线上服务器 的 客户主机 分别生成密钥对,而不要共用一组。方便在某台 客户主机 出现问题后 (诸如丢失 ,损坏,台帐报废等)将其对应的访问权限移除出 线上服务器。