设置 SSH 通过密钥登录(免密登录)
我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。其实,有一个更好的办法来保证安全,而且让你可以放心地用 root 账户从远程登录——那就是通过密钥方式登录。
密钥形式登录的原理是:利用密钥生成器制作一对密钥——一只公钥和一只私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也可以登录。
下面来讲解如何在 Linux 服务器上制作密钥对,将公钥添加给账户,设置 SSH,最后通过客户端登录。
1. 制作密钥对
方法一:交互模式下创建密钥对。
首先在服务器上制作密钥对。首先用密码登录到你打算使用密钥登录的账户,然后执行以下命令:
密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。
现在,在 root 用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥。
方法二:免交互模式,直接创建密钥对。
举例:在指定目录下生成rsa密钥, 并指定注释为“shoufeng”, 实现示例:
执行该条免交互命令:ssh-keygen -t rsa -f ~/.ssh/id_rsa -N 密钥对密码 -C 填写备注信息
[root@localhost ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -C "shoufeng" # ~密钥类型 ~密钥文件路径及名称 ~ 备注信息 Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): # 输入密码, 若不输入则直接回车 Enter same passphrase again: # 再次确认密码, 若不输入则直接回车 Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 9a:e3:94:b9:69:c8:e9:68:4b:dc:fa:43:25:7f:53:f1 waterbear The key's randomart image is: +--[ RSA 2048]----+ | | | . | | o | | . . . E | | + S. | | . .. .=o | | oo.oB. . | | ..o=o.+ | | .++oo+ | +-----------------+
sh-keygen常用参数说明:
-t: 密钥类型, 可以选择 dsa | ecdsa | ed25519 | rsa;
-f: 密钥目录位置, 默认为当前用户home路径下的.ssh隐藏目录, 也就是~/.ssh/, 同时默认密钥文件名以id_rsa开头. 如果是root用户, 则在/root/.ssh/id_rsa, 若为其他用户, 则在/home/username/.ssh/id_rsa;
-C: 指定此密钥的备注信息, 需要配置多个免密登录时, 建议携带;
-N: 指定此密钥对的密码, 如果指定此参数, 则命令执行过程中就不会出现交互确认密码的信息了.
举例说明: 同时指定目录位置、密码、注释信息, 就不需要输入回车键即可完成创建:
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N shoufeng -C shoufeng
2. 在需要登录的服务器上安装公钥
键入以下命令,在服务器上安装公钥:
如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:
3.在需要登录的服务器上设置 SSH服务配置文件,打开密钥登录功能
编辑 /etc/ssh/sshd_config 文件,进行如下设置:
另外,请留意 root 用户能否通过 SSH 登录:
当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:
最后,重启 SSH 服务:
4. 将私钥下载到客户端,如何导入SSH客户端使用?
当客户端和服务端均是Linux(这里指CentOS或RedHat系统),可以直接使用ssh-copy-id命令把A的公钥发送给B服务器(这里假设B服务器IP为172.16.22.132),实现在A服务器上免密登录B服务器
默认用法是: ssh-copy-id -i 公钥文件路径 [email protected], ssh-copy-id命令连接远程服务器时的默认端口是22。
#修改服务器A生成的秘钥权限:
chmod 600 ~/.ssh/id_rsa
# 指定要拷贝的本地公钥文件、远程主机的IP+用户名+端口号(-p):
# ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 [email protected]
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password: # 输入服务器B的远程密码后, 将拷贝公钥到服务器B上
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -p '22' '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
测试!使用密钥登录服务器的命令:需要指定使用的秘钥+链接ssh使用的端口+远程IP地址
ssh -p 端口号 用户名@远程ip -i id_rsa秘钥路径
ssh -p 22 [email protected] -i ~/.ssh/id_rsa
将私钥下载到客户端使用 PuTTY 登陆的,需要转换为 PuTTY 能使用的格式
使用 WinSCP、SFTP 等工具将私钥文件 id_rsa 下载到客户端机器上。然后打开 PuTTYGen,单击 Actions 中的 Load 按钮,载入你刚才下载到的私钥文件。如果你刚才设置了密钥锁码,这时则需要输入。
载入成功后,PuTTYGen 会显示密钥相关的信息。在 Key comment 中键入对密钥的说明信息,然后单击 Save private key 按钮即可将私钥文件存放为 PuTTY 能使用的格式。
今后,当你使用 PuTTY 登录时,输入服务器IP后,可以在左侧的 Connection -> SSH -> Auth 中的 Private key file for authentication: 处选择你的私钥文件,然后即可登录了,过程中只需输入密钥锁码即可。
导入 PuTTY 能使用的格式ppk,这里倒入刚才保存的私钥longtao.ppk
点击打开登录服务器输入用户名root和密钥锁码,就可以登陆成功!
将私钥下载到客户端使用 FinalShell 登陆的,可以直接导入密钥直接使用
FinalShell导入秘钥方法,直接将下载好的秘钥导入即可,点击服务器设置页面如下:
将私钥下载到客户端使用 Xshell 登陆的,可以直接导入密钥直接使用
选择对应会话单击 属性
选择密钥验证方式,选择对应密钥文件,输入密钥锁码 保存即可使用密钥登陆
共有 0 条评论