用户从客户端利用ssh登录服务器时,需要将用户的公钥拷贝到服务器上。而利用SSH CA功能则可免除此操作。大致的原理为:

  1. 服务器信任CA User Signing Key
  2. 生成用户证书,用户证书就是利用CA User Signing Key签署的用户公钥
  3. 用户可从客户端登录服务器,需要提供用户私钥和用户证书,但此时服务器端并没有用户公钥

下面演示此过程,使用了2个Linux实例,实例A充当ssh 客户端,实例B充当ssh 服务器和CA 服务器。其中实例B的IP地址为10.0.1.16。

所谓CA服务器,只是为了生成CA User Signing Key和签署用户证书,在实际登录过程中并未涉及,完全可以离线。

生成CA User Signing Key

此操作在CA服务器上,CA User Signing Key建议使用passphrase。

$ ssh-keygen -t rsa -f ~/.ssh/ca_user_key$ ls -la ~/.ssh
-rw-------. 1 opc opc 1766 Nov  7 06:09 ca_user_key
-rw-r--r--. 1 opc opc  415 Nov  7 06:09 ca_user_key.pub

在服务器上设置对CA User Signing Key的信任

将其拷贝到服务器上,并在sshd配置文件中设置信任:

# cp ca_user_key.pub /etc/ssh
# echo 'TrustedUserCAKeys /etc/ssh/ca_user_key.pub' >> /etc/ssh/sshd_config
# systemctl restart sshd

生成用户密钥对并签署证书

在客户端上,生产用户密钥对:

ssh-keygen -t rsa

将公钥拷贝到CA服务器。

在CA服务器上,生成用户证书id_rsa-cert.pub:

$ ssh-keygen -s ca_user_key -I opc -n opc -V -1d:+54w id_rsa.pub
Enter passphrase:
Signed user key id_rsa-cert.pub: id "opc" serial 0 for opc valid from 2020-11-06T07:20:37 to 2021-11-20T07:20:37

以上命令中,-n表示principal,必须是主机名或用户名,此处为用户名opc。

将用户证书下发到客户端用户的~/.ssh目录下:

$ ls ~/.ssh
authorized_keys  id_rsa  id_rsa-cert.pub

测试客户端登录

$ ssh 10.0.1.16
The authenticity of host '10.0.1.16 (10.0.1.16)' can't be established.
ECDSA key fingerprint is SHA256:neVvD8ejf103xQY7zWOd+rzqW0n2KUL9SRoyWYP+/GU.
ECDSA key fingerprint is MD5:8c:b8:97:0f:00:75:7f:5d:36:5a:6f:ce:ce:f6:b3:a5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.1.16' (ECDSA) to the list of known hosts.
Last login: Sat Nov  7 06:15:57 2020 from 10.0.0.11[opc@instance-20201107-1405internal ~]$ cd ~/.ssh[opc@instance-20201107-1405internal .ssh]$ ls authorized_keys
ls: cannot access authorized_keys: No such file or directory[opc@instance-20201107-1405internal ~]$ exit
logout

在登录时,用户私钥仍是需要的。id_rsa-cert.pub是默认的名字。

参考

  • USING OPENSSH CERTIFICATE AUTHENTICATION
  • Using a CA with SSH

SSH CA User Key实验相关推荐

  1. SSH CA Host Key实验

    在上一篇SSH CA User Key实验中,我们介绍了SSH User Key,实际上user key和host key格式是一样的,只不过用途不一样. 在客户端ssh登录服务器时,服务器会将hos ...

  2. Git 多台电脑共用SSH Public/Private Key

    2019独角兽企业重金招聘Python工程师标准>>> 好了,下面一步一步来实现SSH Public/Private Key的在多台电脑中的共用: 0. 首先我们给旧的MBP起名叫O ...

  3. 使用git时ssh提示“Load key /home/devid/.ssh/id_rsa: bad permissions”的解决办法

    2019独角兽企业重金招聘Python工程师标准>>> 使用git时ssh提示"Load key "/home/devid/.ssh/id_rsa": ...

  4. linux查看ssh公钥,SSH公钥(public key)验证

    安全的设置服务器 登陆,之前用用户名和密码登陆服务器 这样不安全 ,用SSH公钥(public key)验证 这个办法能很好的解决 登陆服务器 和安全登陆服务器的特点: 目标: Client 免输密码 ...

  5. [ssh] remote host key has changed

    vscode 使用 ssh 连接容器时,出现这个问题.不慌,因为之前通过 8000 端口连接过该容器,后来容器被删除重新创建,导致这个问题. 不慌,先用命令行连接下 ssh asdfg@202.xx. ...

  6. 华为模拟器eNSP使用SSH远程管理防火墙实验

    实验要求:在R1上使用SSH远程管理防火墙FW1 Local-FW1: sys sysname FW1 un in en rsa local-key-pair create int g1/0/0 se ...

  7. SSH代理基于Key免密码登录

    SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议,SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议, 利用 SSH 协议可以有效防止远程管理过程中 ...

  8. SSH、OpenSSH、SSL、OpenSSL及CA

    OpenSSL 1. SSH.OpenSSH.SSL.OpenSSL关系及区别 2. SSH介绍 2.1 概念 2.2 SSH的主要功能 2.3 示例讲解 2.4 ssh和sshd的区别 3. Ope ...

  9. 通过key登录ssh

    http://fungo.me/linux/ssh-with-key.html 这里介绍下如何通过"公私钥"认证的方式来进行ssh登录. "公私钥"认证方式简单 ...

最新文章

  1. 三个事件同步实现双相机同步WaitForMultipleObjects
  2. 浅析网站内链优化如何营造良好的内链生态环境?
  3. LeetCode 19 删除链表的倒数第 N 个结点
  4. 单自由度系统的振动的幅频特性曲线及相频特性曲线及matlab分析,实验四 线性系统的频域分析...
  5. dev gridcontrol 根据数据获取索引_MySQL 索引分析除了 EXPLAIN 还有什么方法?
  6. mysql数据库分表备份脚本_mysql 分库分表备份脚本
  7. python内存数据库触发器_Python内存数据库/引擎
  8. 均匀分布 卡方分布_高等数理统计—第一章 统计分布基础
  9. Ruby 之Gem kaminari 分页
  10. python计算机视觉-图像处理基础章节第三章之根据仿射或单应性变换实现图像的扭曲,映射,融合
  11. 浏览器 主页 被篡改 ,怎么都修改不回来(包括 Firefox ,google Chrome) KMS激活问题
  12. 会唱歌的程序员为何如此受欢迎?
  13. 第六届蓝桥杯大赛个人赛决赛(软件类)真题
  14. 网络营销推广怎么做 一封神奇的文案策划背后的真相
  15. 椭圆机的减肥效果怎么样
  16. Sublime text 3(ST3) - Source Insight
  17. 【Mind+Python】基于Pyecharts+Flask+Pinpong智能家居数字大屏系统
  18. 【强烈推荐】机器学习之算法篇
  19. 一盒用于构建响应式电子邮件的技巧
  20. 关于Linux环境下安装配置vsftpd服务全攻略(踩坑)

热门文章

  1. swift-annotations:java编译时警告主版本 52 比 51 新, 此编译器支持最新的主 版本。
  2. Java获得查询数据、运行程序花费的时间
  3. java中计算某个方法的执行时间
  4. 《流量的秘密》读后感
  5. vs2019mac怎么编译c语言,VS2019(Windows+Mac)编辑文件模板
  6. 使用canvas截图跨域导致的报错(Failed to execute ‘toDataURL‘ on ‘HTMLCanvasElement)
  7. 关于IELTS正确答案的阅读提取
  8. 将HTTP链接转到HTTPS的Firefox插件
  9. c++ 类 const成员函数重载
  10. 双色球机选彩票shell脚本