SSH CA User Key实验
用户从客户端利用ssh登录服务器时,需要将用户的公钥拷贝到服务器上。而利用SSH CA功能则可免除此操作。大致的原理为:
- 服务器信任CA User Signing Key
- 生成用户证书,用户证书就是利用CA User Signing Key签署的用户公钥
- 用户可从客户端登录服务器,需要提供用户私钥和用户证书,但此时服务器端并没有用户公钥
下面演示此过程,使用了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实验相关推荐
- SSH CA Host Key实验
在上一篇SSH CA User Key实验中,我们介绍了SSH User Key,实际上user key和host key格式是一样的,只不过用途不一样. 在客户端ssh登录服务器时,服务器会将hos ...
- Git 多台电脑共用SSH Public/Private Key
2019独角兽企业重金招聘Python工程师标准>>> 好了,下面一步一步来实现SSH Public/Private Key的在多台电脑中的共用: 0. 首先我们给旧的MBP起名叫O ...
- 使用git时ssh提示“Load key /home/devid/.ssh/id_rsa: bad permissions”的解决办法
2019独角兽企业重金招聘Python工程师标准>>> 使用git时ssh提示"Load key "/home/devid/.ssh/id_rsa": ...
- linux查看ssh公钥,SSH公钥(public key)验证
安全的设置服务器 登陆,之前用用户名和密码登陆服务器 这样不安全 ,用SSH公钥(public key)验证 这个办法能很好的解决 登陆服务器 和安全登陆服务器的特点: 目标: Client 免输密码 ...
- [ssh] remote host key has changed
vscode 使用 ssh 连接容器时,出现这个问题.不慌,因为之前通过 8000 端口连接过该容器,后来容器被删除重新创建,导致这个问题. 不慌,先用命令行连接下 ssh asdfg@202.xx. ...
- 华为模拟器eNSP使用SSH远程管理防火墙实验
实验要求:在R1上使用SSH远程管理防火墙FW1 Local-FW1: sys sysname FW1 un in en rsa local-key-pair create int g1/0/0 se ...
- SSH代理基于Key免密码登录
SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议,SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议, 利用 SSH 协议可以有效防止远程管理过程中 ...
- 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 ...
- 通过key登录ssh
http://fungo.me/linux/ssh-with-key.html 这里介绍下如何通过"公私钥"认证的方式来进行ssh登录. "公私钥"认证方式简单 ...
最新文章
- 三个事件同步实现双相机同步WaitForMultipleObjects
- 浅析网站内链优化如何营造良好的内链生态环境?
- LeetCode 19 删除链表的倒数第 N 个结点
- 单自由度系统的振动的幅频特性曲线及相频特性曲线及matlab分析,实验四 线性系统的频域分析...
- dev gridcontrol 根据数据获取索引_MySQL 索引分析除了 EXPLAIN 还有什么方法?
- mysql数据库分表备份脚本_mysql 分库分表备份脚本
- python内存数据库触发器_Python内存数据库/引擎
- 均匀分布 卡方分布_高等数理统计—第一章 统计分布基础
- Ruby 之Gem kaminari 分页
- python计算机视觉-图像处理基础章节第三章之根据仿射或单应性变换实现图像的扭曲,映射,融合
- 浏览器 主页 被篡改 ,怎么都修改不回来(包括 Firefox ,google Chrome) KMS激活问题
- 会唱歌的程序员为何如此受欢迎?
- 第六届蓝桥杯大赛个人赛决赛(软件类)真题
- 网络营销推广怎么做 一封神奇的文案策划背后的真相
- 椭圆机的减肥效果怎么样
- Sublime text 3(ST3) - Source Insight
- 【Mind+Python】基于Pyecharts+Flask+Pinpong智能家居数字大屏系统
- 【强烈推荐】机器学习之算法篇
- 一盒用于构建响应式电子邮件的技巧
- 关于Linux环境下安装配置vsftpd服务全攻略(踩坑)
热门文章
- swift-annotations:java编译时警告主版本 52 比 51 新, 此编译器支持最新的主 版本。
- Java获得查询数据、运行程序花费的时间
- java中计算某个方法的执行时间
- 《流量的秘密》读后感
- vs2019mac怎么编译c语言,VS2019(Windows+Mac)编辑文件模板
- 使用canvas截图跨域导致的报错(Failed to execute ‘toDataURL‘ on ‘HTMLCanvasElement)
- 关于IELTS正确答案的阅读提取
- 将HTTP链接转到HTTPS的Firefox插件
- c++ 类 const成员函数重载
- 双色球机选彩票shell脚本