在控制台绑定密钥时需要重启实例,但这可能影响业务连续性。如果您希望在不重启实例的情况下绑定密钥,可以参考本文进行手动操作。本文将详细介绍如何为实例手动绑定密钥对,实现免密登录。
方案概述
手动绑定密钥对并实现免密登录需要进行以下操作:
生成密钥对:其中密钥作为后续登录的凭证,由您自行保存,公钥将存储在实例内。
为实例绑定公钥:通过可靠的连接方式,将您的公钥添加到实例中。本步骤主要关注
~/.ssh/authorized_keys
配置文件。开启SSH服务端的公钥认证功能:在绑定公钥后,您还需要在实例的SSH服务端开启公钥认证功能。本步骤主要关注
/etc/ssh/sshd_config
配置文件。通过密钥对认证连接实例:在完成前几步操作后,可以通过SSH认证的方式连接实例,验证密钥认证功能已经配置成功。
1. 生成密钥对
您可以通过多种方式生成密钥对,不同的工具生成密钥对的步骤有所差别,本步骤以通过执行ssh-keygen
命令生成密钥对为例。在命令行输入以下命令生成密钥对。
ssh-keygen -t rsa -b 2048 -f id_rsa
-t rsa
:代表密钥类型为rsa
密钥对。-b 2048
:代表密钥长度为2048位。-f id_rsa
:代表生成密钥对的文件名以及保存位置。
执行这条命令后,系统会提示您输入一个密码短语(passphrase),用于保护私钥。设置密码后,即使私钥被盗,攻击者也需要密码才可以使用私钥。
如果您不希望为私钥设置密码,可以直接按回车键跳过。
命令执行完成后,会在当前命令行所在目录下生成一对密钥文件:id_rsa.pub
(公钥)、id_rsa
(私钥),请妥善保存私钥,不要泄漏给他人。
2. 为实例绑定公钥
为实例绑定公钥后,可以在连接实例时通过与其相对应的私钥作为登录凭证。
选择合适的方式连接到ECS实例,具体操作,请参见连接到Linux实例(SSH)或通过会话管理连接到实例(Windows/Linux、支持免密登录)。
在
~/.ssh/authorized_keys
中配置公钥文件。在操作之前,您需要明确登录Linux系统的用户身份,例如使用
ecs-user
的身份登录实例,就需要为ecs-user
配置公钥。设置root用户的公钥
创建
authorized_keys
配置文件。root用户的公钥配置文件在
/root/.ssh/authorized_keys
路径下。如果没有该文件,请输入以下命令创建.ssh
文件夹和authorized_keys
配置文件。sudo mkdir /root/.ssh sudo touch /root/.ssh/authorized_keys
将步骤1中生成的公钥信息复制到
/root/.ssh/authorized_keys
配置文件中。您可以使用vim编辑器编辑该文件,具体操作,请参见Vim编辑器。
修改该配置文件的权限。
该文件配置过高的权限会导致SSH连接失败,请设置以下权限。
sudo chmod 700 /root/.ssh sudo chmod 600 /root/.ssh/authorized_keys
设置非root用户的公钥
如果您要为其他系统用户绑定密钥对,请参考以下步骤。
创建
authorized_keys
配置文件。找到
/home/<username>/.ssh/authorized_keys
配置文件,其中<username>
为您待绑定密钥对的用户。例如您需要给ecs-user绑定密钥对,您需要关注
/home/ecs-user/.ssh/authorized_keys
配置文件。如果没有该配置文件,请输入以下命令在对应用户的家目录下创建配置文件。
命令中
<user_name>
为您待绑定公钥用户的用户名。sudo mkdir /home/<username>/.ssh sudo touch /home/<username>/.ssh/authorized_keys
将步骤1中生成的公钥复制到
/home/<user_name>/.ssh/authorized_keys
配置文件中。该文件可以支持多行,如果要绑定多个密钥对,可以在新的一行添加新的公钥信息。您可以使用vim编辑器编辑该文件,具体操作,请参见Vim编辑器。
修改该配置文件的权限。
该文件配置过高的权限会导致SSH连接失败,请设置以下权限。
命令中
<username>
为您待绑定公钥用户的用户名。sudo chmod 700 /home/<username>/.ssh sudo chmod 600 /home/<username>/.ssh/authorized_keys
3. 开启SSH服务的公钥认证功能
在实例内配置公钥之后,需要开启SSH服务的公钥认证功能,否则无法使用密钥对连接实例。
修改SSH的配置文件
/etc/ssh/sshd_config
中的PubkeyAuthentication
参数为yes
,代表开启公钥认证功能。重要您可以使用vim编辑器编辑该文件,具体操作,请参见Vim编辑器。建议修改前备份该配置文件,防止误操作导致的SSH服务启动失败。
输入命令,重启SSH服务,使配置生效。
以Alibaba Cloud Linux 3为例,输入以下命令重启SSH服务。
部分操作系统(Ubuntu/Debian)的SSH服务名为
ssh
而非sshd
,请根据实际情况调整。sudo systemctl restart sshd
重要如果您是通过SSH的方式连接到实例,重启服务时您的连接可能会发生中断,等待SSH服务重启完成后,您可以重新连接到该实例。
4. 通过密钥对认证实现免密登录
在配置完成密钥对之后,您可以使用密钥对认证的方式连接到Linux实例,不同的工具使用步骤不同,本文以通过命令行和阿里云控制台的Workbench为例,为您介绍如何通过密钥对认证的方式登录Linux实例。
命令行
在完成前面的配置操作之后,您可以在命令行输入以下命令连接Linux实例。
ssh -i <identity_file_path> -p <ssh_port> <username>@<server_ip>
该命令中各个参数说明如下:
<identity_file_path>
:私钥文件位置。<ssh_port>
:SSH服务的端口,默认为22。<username>
: 通过指定用户的身份登录实例。<server_ip>
:实例的IP地址(如果是本地远程连接ECS实例,需要填写实例的公网IP地址,若是在内网互通的其他云服务器上,可使用私网IP地址)。
Workbench
在使用Workbench通过公网IP或私网IP(SSH方式)连接到Linux实例时,可以选择通过密钥对认证的方式登录实例。具体操作,请参见通过密码或密钥认证登录Linux实例。
更多操作
为同一用户绑定多个密钥对(公钥)
用户家目录下的.ssh/authorized_keys
文件支持多行配置,每行添加一个公钥,即可让多个密钥对使用同一用户身份登录。
手动解绑密钥对(公钥)
您可以通过编辑用户家目录下的.ssh/authorized_keys
文件,直接删除特定的公钥条目。删除后,对应的私钥将无法用于该用户的实例连接。
通过~/.ssh/config
配置文件简化ssh连接命令
如果您经常连接到多个不同的实例,您可以使用本机~/.ssh/config
配置文件简化命令,无需每次登录都输入完整的命令。具体配置方式如下。
实现效果
简化前:
ssh -i <identity_file_path> -p <ssh_port> <username>@<server_ip>
简化后:
ssh <server_name>
配置流程
在您的本机编辑或创建
~/.ssh/config
配置文件。在该配置文件下添加以下内容:
Host <server_name> HostName: <server_ip> User <username> IdentityFile <identity_file_path> Port <ssh_port>
该配置文件中各个参数说明如下:
<server_name>
:自定义服务器别名。<server_ip>
:实例的IP地址。<username>
: 通过指定用户的身份登录实例。<identity_file_path>
:私钥文件位置。<ssh_port>
:SSH服务的端口,默认为22。
配置后使用简化命令。
<server_name>
为您在~/.ssh/config
配置文件中设置的服务器别名。ssh <server_name>