如何配置SSH Key登录主机资源
SSH 和密钥概述
SSH 是一种加密的连接协议,利用该协议可以通过未受保护的连接进行安全登录。 虽然 SSH 提供加密连接,但是将密码用于 SSH 连接仍会使 VM 易受到暴力攻击。 建议使用公钥-私钥对(也称为“SSH 密钥”)通过 SSH 连接到 VM。
- 公钥放置在 VM 上。
- 私钥仍保留在本地系统上。 请保护好私钥, 不要透露给其他人。
当你使用 SSH 客户端连接到 VM(具有公钥)时,远程 VM 会测试客户端以确保其具有正确的私钥。 如果客户端具有私钥,则授予其访问 VM 的权限。
根据组织的安全策略,可重复使用单个公钥-私钥对来访问多个主机资源。 无需对要访问的每个 VM 或服务使用单独的密钥对。
可与任何人共享公钥;但只有你(或本地安全基础结构)才应具有对私钥的访问权限。
ssh-keygen 说明
用法概要
ssh-keygen --help
unknown option -- -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa] [-m format]
[-N new_passphrase] [-C comment] [-f output_keyfile]
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-m format]
[-f keyfile]
ssh-keygen -i [-m key_format] [-f input_keyfile]
ssh-keygen -e [-m key_format] [-f input_keyfile]
ssh-keygen -y [-f input_keyfile]
ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
ssh-keygen -B [-f input_keyfile]
ssh-keygen -D pkcs11
ssh-keygen -F hostname [-f known_hosts_file] [-l]
ssh-keygen -H [-f known_hosts_file]
ssh-keygen -R hostname [-f known_hosts_file]
ssh-keygen -r hostname [-f input_keyfile] [-g]
ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]
ssh-keygen -T output_file -f input_file [-v] [-a rounds] [-J num_lines]
[-j start_line] [-K checkpt] [-W generator]
ssh-keygen -s ca_key -I certificate_identity [-h] [-U]
[-D pkcs11_provider] [-n principals] [-O option]
[-V validity_interval] [-z serial_number] file ...
ssh-keygen -L [-f input_keyfile]
ssh-keygen -A
ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number]
file ...
ssh-keygen -Q -f krl_file file ...
选项
支持以下选项:
-
–b
bits指定要创建的密钥的位数。最小位数为 512 位。通常,2048 位足以满足安全需要。密钥大小超过该值并不会提高安全性,反而会降低速度。缺省值为 2048 位。
-
–B
显示指定的私钥或公钥文件的 bubblebabble 摘要。
-
–c
请求更改私钥和公钥文件中的注释。该程序会提示您提供包含私钥的文件、口令短语(如果密钥具有一个口令短语)以及新的注释。此选项仅适用于
rsa1
(SSHv1
) 密钥。 -
–C
comment该字段只是为了便于用户识别密钥,可以说明密钥的用途或提供任何有用信息。
-
–e
此选项读取 OpenSSH 私钥或公钥文件并将密钥以 “SECSH” 公钥文件格式输出到 stdout。此选项允许导出密钥供其他一些 SSH 实现使用。
-
–f
指定密钥文件的文件名。
-
–F
在
known_hosts
文件中搜索指定的 hostname,列出找到的任何匹配项。此选项可用于查找散列格式的主机名或地址,还可以与–H
选项一起使用,以散列格式输出找到的密钥。 -
–H
对
known_hosts
文件执行散列计算。此选项使用散列形式替换指定文件内的所有主机名和地址。原始内容将移动到后缀为.old
的文件中。这些散列值通常由ssh
和sshd
使用,即使文件内容被公开,这些散列值也并不会透露可识别的信息。此选项不会修改现有的散列主机名,因此可以放心地用于同时包含散列名称和非散列名称的文件。 -
–i
此选项以 SSH2 兼容格式读取未加密的私钥(或公钥)文件并将 OpenSSH 兼容的私钥(或公钥)输出到 stdout。
ssh-keygen
还可读取 “SECSH” 公钥文件格式。此选项允许从其他一些 SSH 实现中导入密钥。 -
–l
显示指定的私钥或公钥文件的指纹。
-
–N
new_passphrase提供新口令短语。
-
–p
请求更改私钥文件的口令短语,而不创建新私钥。该程序会提示您提供包含私钥的文件、旧口令短语,并两次提示您输入新口令短语。
-
–P
passphrase提供(旧)口令短语。
-
–q
退出
ssh-keygen
。 -
–t
type指定用于生成密钥的算法,其中 type 是
rsa
、dsa
和rsa1
中的一种。rsa1
类型仅用于 SSHv1 协议。 -
–R
hostname从
known_hosts
文件中删除属于 hostname 的所有密钥。此选项可用于删除散列主机。请参见–H
。 -
–x
已过时。已被
–e
选项取代。 -
–X
已过时。已被
–i
选项取代。 -
–y
此选项读取 OpenSSH 私钥格式文件并将 OpenSSH 公钥输出到 stdout。
-
–8
指定
ssh-keygen
生成 PKCS#8 格式的密钥。对于要生成的密钥,支持的类型为rsa
或dsa
。
使用 ssh-keygen 生成密钥
-
登录主机,执行以下命令,生成SSH Key.
ssh-keygen –t rsa
回显信息如下:
ssh-keygen -t rsa Generating public/private rsa key pair.
可根据需要配置SSH Key的文件名和密码,回显信息示例如下:
Enter file in which to save the key (/root/.ssh/id_rsa):置空或输入将生成的文件名,文件保存目录为/root/.ssh。 Enter passphrase (empty for no passphrase):置空或根据需要输入密码 Enter same passphrase again:确认输入密码 Your identification has been saved in /home/fdipzone/.ssh/id_rsa. Your public key has been saved in /home/fdipzone/.ssh/id_rsa.pub. The key fingerprint is: f2:76:c3:6b:26:10:14:fc:43:e0:0c:4d:51:c9:a4:b2 root@Server The key's randomart image is: +--[ RSA 2048]----+ | .+=* | | . += + | | o + | | E . . o | | .S. | | .o . | | . + | | .. | | . +. | +-----------------+
说明:
参数**-t rsa**表示使用rsa算法进行加密,也可以使用dsa加密算法加密,命令如下:
ssh-keygen -t dsa
-
执行以下命令,查看SSH Key文件
cd /root/.ssh(文件保存目录)*/*
在当前用户SSH Key文件保存目录下,查看已生成私钥id_rsa和公钥id_rsa.pub文件
回显信息示例如下
[root@vpn ~]# cd /root/.ssh/ [root@vpn .ssh]# ll total 8 -rw-------. 1 root root 0 Mar 23 08:45 authorized_keys -rw------- 1 root root 1675 Mar 24 06:04 id_rsa -rw-r--r-- 1 root root 390 Mar 24 06:04 id_rsa.pub
在服务器上安装公钥
在当前用户/.ssh目录下,执行以下命令,拷贝公钥内容到authorized_keys文件中
cat id_rsa.pub >>authorized_keys
将私钥下载到客户端使用
以Xshell登录SSH协议类型资源为例,介绍如何通过SSH客户端登录资源进行运维
-
打开本地Xshell客户端工具,选择“文件 > 新建”,新建用户会话。
-
配置会话用户连接。
-
方式一
-
选择协议类型SSH,输入云堡垒机实例弹性IP地址,端口号配置为2222,单击
“确认”
图1 配置会话属性
-
连接到会话,输入云堡垒机用户名,单击
“连接”
图2 连接会话
-
-
方式二
在新的空白会话窗口,执行登录命令:协议类型 用户登录名@系统登录IP 端口,例如执行ssh [email protected] 2222。
-
方式三
在正在运行的Linux主机会话窗口,执行登录命令:协议类型 用户登录名@系统登录IP -p 端口,例如执行ssh [email protected] -p 2222。
-
-
云堡垒机用户身份验证。
-
选择密码登录,输入云堡垒机用户密码,单击“确定”。
-
选择公钥登录,在
“浏览”
中选择用户密钥,输入密码,单击
“确定”
登录验证成功后,再次登录时该用户在SSH客户端可以免密登录。
图3 云堡垒机用户身份验证
-
-
登录到云堡垒机系统。
SSH客户端登录认证支持密码登录、手机短信、手机令牌和动态令牌方式。其中手机短信、手机令牌和动态令牌方式,需配置用户多因子认证,详情请参考用户登录配置。
- 手机短信:本地密码方式登录后,选择“短信验证码”,输入手机短信验证码。
- 手机令牌:本地密码方式登录后,选择“手机令牌OTP”,输入手机令牌验证码。
- 动态令牌:本地密码方式登录后,选择“动态令牌OTP”,输入动态令牌验证码。
-
批量导入云堡垒机资源账户。
解压配置文件压缩包,打开“readme.txt”文件,并参考指导导入资源账户。
图4 配置文件指导说明
-
登录资源账户。
选择需登录的资源账户,输入系统用户密码,登录资源账户进行运维操作。
图5 登录到云堡垒机资源账户