云服务器 ECS Linux SSH 基于密钥交换的自动登录原理简介及配置说明__远程登录 (SSH)_Linux操作运维问题_云服务器 ECS-阿里云
,注意:,本文相关配置及说明已在, CentOS 6.5 64 ,位操作系统中进行过测试。其它类型及版本操作系统配置可能有所差异,具体情况请参阅相应操作系统官方文档。
,SSH ,服务可以对所有传输的数据进行加密,提供比传统, ,telnet 服务更高的安全性(更多关于,SSH ,服务的连接交互过程,可以参阅, ,,,云服务器 ECS Linux SSH ,,连接交互过程简介,)。而基于密钥认证的 ,SSH ,自动化登录,在保障安全性的同时,可以简化登录过程,降低运维成本。本文先简要介绍基于密钥交换的, ,SSH ,自动登录的原理,然后对配置方法进行说明。
,原理简介
,SSH,证书认证登录的基础是一对唯一匹配密钥,: ,私钥,(,private key,)和公钥(,public key,)。公钥用于对数据进行加密,而且只能用于加密。而私钥只能对使用所匹配的公钥,所加密过的数据进行解密。私钥需要用户单独妥善保管。SSH ,客户端使用私钥向服务器证明自已的身份。而公钥是公开的,可以按需将其配置到目标服务器上自己的相应帐号中。
,在进行, ,SSH 登录认证时,进行私钥和公钥协商。如果匹配,则身份得以证明,认证成功,允许登录。否则,将会继续使用密码验证等其它方式进行登录校验。SSH ,证书验证登录配置及登录协商过程,如下证书校验交互登录流程示意图所示:
,各步骤补充说明如下:
生成证书
- ,客户端生成密钥对。
- ,,将公钥信息写入目标服务器、目标账户的配置文件。该操作隐含表示了客户端拥有对目标服务器的控制权。
协商交互过程
-
, ,,客户端向目标服务器发送登录请求。在SSH 服务启用了证书验证登录方式后,会优先通过证书验证方式进行登录验证。,
- ,目标服务器根据, ,SSH ,服务配置,在用户对应目录及文件中读取到有效的公钥信息。
-
,目标服务器生成一串随机数,然后使用相应的公钥对其加密。
-
,目标服务器将加密后的密文发回客户端。
-
,客户端使用默认目录或 -,i ,参数指定的私钥尝试解密。
-
,如果解密失败,则会继续尝试密码验证等其它方式进行登录校验。如果解密成功,则将解密后的原文信息重新发送给目标服务器。意思类似于: ,“,看,这是这段话的原文。我能读懂发过来的密文,我拥有服务器的控制权,请让我登录。,”
-
,,目标服务器对客户端返回的信息进行比对。如果比对成功,则表示认证成功,客户端可以登录。如果对比失败,则表示认证失败,则会继续尝试密码验证等其它方式进行登录校验。
,自动登录配置
,生成密钥对
,SSH ,协议, V1,只使用, ,RSA ,算法,而, ,SSH ,协议,V2 ,对, ,RSA ,算法和, ,DSA ,算法都支持。目前所有,OpenSSH ,版本都应该对两种算法都支持。两种算法的密钥的生成指令和使用方法相同,本文仅以, ,RSA ,算法为例进行相关说明。
,生成密钥对的时候,可以按需决定是否设置密码。但需要注意的是,如果设置了密码,还需结合 ,ssh-agent ,代理和 ,ssh-add ,配置才能实现自动登录。同时,相关配置只对 ,ssh-agent ,启动的相应 ,shell ,生效,用户退出后重新登录时还需重新配置。所以,为简便起见,本文以常见的、不配置密码的情况进行说明。
,可以在任意支持环境下生成密钥对。,Windows ,和, ,Linux ,环境下,配置分别说明如下。
,Windows ,环境下生成密钥对
,在 ,Windows ,环境下,通常借助各种应用软件来创建和管理密钥对。以常见的,NetSarang Xshell,为例,请执行如下步骤创建密钥对:
- ,打开,Xshell,程序。
- ,,单击 工具 ,> 用户密钥管理者 ,再点击 生成 。
- ,,,在打开的密钥创建向导中,选择默认的 ,RSA 密钥算法及密钥长度(默认, 2048 位)后,点击, 下一步 。
- ,,,,程序生成密钥对后,点击 ,下一步,。
- ,,,,,如前面所述,密钥加密密码留空:
- 点击 下一步,会弹出确认信息,点击 是 确认。
- ,复制或者点击, ,保存为文件, ,对公钥信息进行保存。
- ,,点击, ,完成, ,,在, ,用户密钥管理者 ,列表中能看到相应的密钥信息。
,Linux ,环境下生成密钥对
,在 ,Linux ,环境下,通常使用系统自带的 ,ssh-keygen ,软件来创建和管理密钥对。请执行如下步骤创建密钥对:
- ,以任意具有 ,ssh-keygen ,执行权限的用户登录服务器。
- ,,使用如下指令,基于 ,rsa ,算法创建密钥对:
ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): → 默认保存路径和文件名,可以按需修改。 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: 17:b8:0e:76:cb:57:21:3b:f2:bb:8b:a2:42:2b:54:be root@iZ233gr74jvZ The key's randomart image is: +--[ RSA 2048]----+ | | | . | | . o . | | . . + . | | o o S + . | | ... . = = o | |.. .. + o | |. oE . o . | | . ... .. +o | +-----------------+
,说明:
-
,如果 .ssh ,目录不存在,程序会自动创建。
-
,生成的密钥对默认保存在当前用户家目录下的 .ssh ,文件夹中,文件名默认为, id_rsa,(私钥) ,和, id_rsa.pub,(公钥)。用户可以按需设置保存路径和文件名。
,密钥配置
,生成密钥对后,进行如下处理:
,私钥的处理
,私钥用于信息校验,请确保安全。可以将私钥上传到其它源服务器上,或者直接参阅前述说明创建新的密钥对。
,公钥的处理
,公钥信息需要写入目标服务器、目标用户的配置文件中,默认配置文件为对应用户家目录下, .ssh ,文件夹中的, ,authorized_keys,,即:
~/.ssh/authorized_keys
,可以复制公钥信息后,直接通过, ,vi ,等编辑器将其写入上述文件。或者通过如下指令,在源服务器上配置写入:
cat ~/.ssh/id_rsa.pub | ssh <用户名>@<目标服务器IP> 'cat >> ~/.ssh/authorized_keys';
比如:
cat ~/.ssh/id_rsa.pub | ssh root@120.26.38.248 'cat >> ~/.ssh/authorized_keys';
,注意:
- 该操作由于需要登录目标服务器才能完成,所以隐含表示了客户端拥有对目标服务器的控制权。
-
如果修改了默认的目录或文件名,则需要同步修改SSH 服务配置文件(默认为/etc/ssh/sshd_config)中的AuthorizedKeysFile 参数,否则会因找不到公钥信息而导致自动登录失败。
,参数与权限检查确认
,要顺利完成自动登录,还需对,SSH ,服务相关参数及关联文件、文件夹的权限进行确认或调整。
,SSH ,服务参数设置
,SSH ,服务默认开启了证书认证支持。编辑 ,SSH ,服务配置文件(默认为,/etc/ssh/sshd_config,),确保如下参数没有显示的置为 ,no,。否则,将参数值修改为 ,yes,,或者整个删除或注释(在最开头添加, # ,号)整行配置。比如:
#RSAAuthentication yes
#PubkeyAuthentication yes
,同时,如前面所述,如果修改了默认的公钥路径或文件名,还需确保 ,AuthorizedKeysFile, ,参数值配置的信息与其一致。
,注意,:如果对相关参数做了修改,需要重启 ,SSH ,服务生效。
,相关权限设置
,SSH ,服务证书验证方式登录,对相关目录和文件的权限有要求。权限配置异常可能会导致登录失败。
- ,.ssh ,目录的权限配置
,使用如下指令,确保 $HOME/.ssh ,目录只有所有者才有权写入:chmod 700 ~/.ssh
- ,authorized_keys ,文件的权限配置
,使用如下指令,确保其它用户对 ,authorized_keys ,文件没有修改权限:,?chmod 600 ~/.ssh/authorized_keys
- ,进一步安全配置
,进一步的安全设置可以将, ,authorized_keys ,文件权限配置为, 400,(其他用户没有任何权限),并对其及, .ssh ,目录添加, ,immutable ,位权限(防止文件被修改):
,chmod 400 ~/.ssh/authorized_keys chattr +i ~/.ssh/authorized_keys chattr +i ~/.ssh
,自动登录
,完成上述配置后,在客户端即可免密码直接登录。说明如下:
,Windows ,环境自动登录
,Window ,环境下,还是以常见的,NetSarang Xshell,为例,请执行如下配置进行自动登录:
- ,单击 ,文件 ,> ,属性,,打开主机属性配置窗口。
- ,,点击, ,连接, ,> ,用户身份验证,,如下图所示,将, ,方法, ,设置为, ,Public Key,;将, ,用户名, ,设置为已经设置了证书登录的相应用户名;将, ,用户密钥, ,设置,为对应的私钥。最后,点击, ,确定,。
- ,再次连接相应服务器时,无需密码输入用户名和密码,即可自动登录。
,Linux ,环境自动登录
,Linux ,环境下,在客户端直接通过, ,ssh ,软件免密码登录:
ssh <用户名>@<目标服务器>
比如:
ssh root@192.168.0.1
,如果修改了私钥路径或文件名,则需要通过, ,–i ,参数进行指定:
ssh –i <私钥路径及文件名> <用户名>@<目标服务器>
比如:
ssh -i /bak/my_rsa user@192.168.0.1
,更多信息
- ,,Secure Shell,:,Wikipedia ,上关于 ,SSH ,的介绍和讨论。
- ,,,OpenSSH Manual Pages,:,OpenSSH ,官方使用手册。
最后更新:2016-07-12 15:24:19
上一篇:
云服务器 ECS Linux SSH 连接交互过程简介__远程登录 (SSH)_Linux操作运维问题_云服务器 ECS-阿里云
下一篇:
云监控ECS监控插件安装方法__技术分享_技术运维问题_云监控-阿里云
设置页面优化__配置操作接口_API 手册_CDN-阿里云
连接集群__集群管理_用户指南_容器服务-阿里云
阿里云联手江苏无锡 打造中国首个物联网之城
库名不同的数据库之间的数据迁移__最佳实践_数据传输-阿里云
是否可以仅允许子用户查看青岛的ECS实例,但是不允许查看磁盘信息及快照信息___云服务器(ECS)授权问题_授权常见问题_访问控制-阿里云
hash分区__分区_SQL语法参考_云数据库 OceanBase-阿里云
管理 Job__SchedulerX for EDAS_二方服务_企业级分布式应用服务 EDAS-阿里云
查询实例数据加密状态__实例管理_API 参考_云数据库 RDS 版-阿里云
DROP TABLE__数据定义语言_SQL语法参考_云数据库 OceanBase-阿里云
唯一性保证__进阶与深入_数据集成-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云