使用 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
,或在该指令前加 #
注释该指令。
参考资料: