使用 SSH 密钥登录服务器
本文简要介绍了如何生成并使用 SSH 密钥登录远程服务器。
SSH (secure shell) 是一种管理本地与服务器之间通信的加密协议。推荐使用 SSH 密钥登录服务器,这比使用传统的密码登录更安全高效。
本地生成密钥对
|
|
根据屏幕提示,按 ENTER 将密钥对存放在默认目录 ~/.ssh/ 下,或输入想存放的路径。若之前生成过密钥对,屏幕提示询问是否覆盖原有密钥对,输入 n 并 ENTER 取消操作。
之后屏幕提示输入密钥密码,可直接 ENTER 不设置密钥密码,这样在使用 SSH 密钥登录时就不需要再输入密码。但还是推荐设置密钥密码,多一层防护。
屏幕提示生成的密钥对存放在 ~/.ssh/ 目录下,其中 id_rsa 为私钥需妥善保存,id_rsa.pub 为公钥需上传至服务器。
将公钥上传至服务器
使用 ssh-copy-id 上传
进行下列操作前请确认可以通过密码登录至服务器。
|
|
根据屏幕提示,输入 username 用户登录服务器的密码。本地公钥将会被上传并附加至服务器 ~/.ssh/ 目录下的 authorized_keys 文件中。
请将本文所有命令中的
username替换为自己服务器上的用户名;将hostname替换为自己服务器的 IP 地址或其对应的服务器名称。
使用 SSH 上传
进行下列操作前请确认可以通过密码登录至服务器。
若 ssh-copy-id 不可用,可通过 SSH 上传密钥。
|
|
根据屏幕提示,输入 username 用户登录服务器的密码。
下面逐句解释上述命令。
读取公钥内容
|
|
复制公钥内容
|
|
| 为管道命令操作符,其作用是将 command1 命令的正确输出传递给 command2 命令,作为其标准输入。在这里可以理解为复制上一步 cat 命令的输出结果。
登录服务器
|
|
之后 "" 中以 && 分割的多条命令,将会通过 SSH 在服务器上依次运行。
在服务器上创建 .ssh 目录
|
|
参数 -p 可在中间目录不存在时,依次创建中间目录。若服务器上已存在相应目录,则不做操作。
在服务器上创建 authorized_keys 文件
|
|
若服务器上已存在相应文件,则不做操作。
设置服务器上 .ssh 目录的权限
|
|
删除 username 用户所在组中其他用户以及其他组对 .ssh 目录的所有(读、写以及执行)权限。
将公钥附加到 authorized_keys 文件末尾
|
|
这里 >> 为追加命令,将 2.2.2 中复制的公钥内容附加到 authorized_keys 文件末尾,不影响其中已存在的其他公钥。
手动上传公钥
当无法使用密码登录服务器时,可手动将公钥内容复制至服务器上 authorized_keys 文件末尾。此时要求:
- 有一个已(或可以)登录服务器的账号且该账号有在
username目录下的读写权限,如root账号或其他有 root 权限的账号, - 已复制公钥内容。
具体操作步骤与 2.2 中通过 SSH 在服务器上运行的命令基本一致。以下命令均在服务器上运行。
进入 username 目录
|
|
创建 .ssh 目录
请确保操作账号拥有
username用户目录的读写权限,如root账号。若操作账号为拥有 root 权限的其他普通账号,请在下列命令前加sudo。
|
|
将公钥附加到 authorized_keys 文件末尾
|
|
该命令中 public_key_string 即为提前复制好的公钥内容。此步骤也可选用自己熟悉的文本编辑器,如 vi/vim 打开 .ssh/authorized_keys 文件后将复制好的公钥内容追加到文件末尾。
设置 .ssh 目录的权限
|
|
删除所有其他用户以及其他组对 .ssh 目录的所有(读、写以及执行)权限。
|
|
将 .ssh 目录的所有权更改为 username 用户。
使用 SSH 密钥登录服务器
将公钥上传至服务器后,在本地命令行中执行:
|
|
若在 1. 中生成密钥对时未设置密钥密码,此时可直接登录至服务器,否则需要输入密钥密码。
禁用密码登录服务器
在确保可使用 SSH 密钥登录服务器后,建议禁用密码登录服务器,以避免针对服务器的暴力破解攻击。
在进行下列操作前,请确保
root用户可通过SSH 密钥登录服务器或可使用 SSH 密钥登录服务器的账号拥有 root 权限。参考在服务器上新建账户并赋予 root 权限为普通用户赋予 root 权限。
修改 SSH 配置文件
通过有 root 权限的账号登录服务器后,执行
|
|
打开 SSH 后台驻留进程的配置文件,找到名为 PasswordAuthentication 的指令。若该指令被注释,即前有 # ,则删除该命令前的 # 并将其后的值改为 no ,禁用密码登录服务器。
|
|
重启 sshd 服务
|
|
此时为保险起见,在本地打开一个新的命令行窗口,使用 SSH 密钥再次尝试登录上述拥有 root 权限的账号,确认可正常登录后可放心将所有账号退出服务器。 此后服务器仅支持 SSH 密钥登录,禁用密码登录。
恢复密码登录服务器
若希望重新启用密码登录服务器,可将服务器上 /etc/ssh/sshd_config 文件中 PasswordAuthentication 指令的值改为 yes,或在该指令前加 # 注释该指令。
参考资料:
