SSL基础:4:使用openssl生成ssh的非对称密钥对
使用ssh的时候,如果使用密钥方式,一般会使用openssh提供的ssh-keygen命令来生成RSA或者其他算法的非对称密钥对。而使用OpenSSL提供的openssl命令也可以做到这些,这篇文章以使用openssl生成符合ssh连接的密钥对的示例对相关内容进行解释和说明。
ssh-keygen VS openssl
使用ssh-keygen可以生成RSA、RSA1、DSA、ECDSA、ED25519等方式的密钥对。
[root@liumiaocn ~]# ssh-keygen help 2>&1 |grep rsa
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
[root@liumiaocn ~]#
而使用openssl也可以完成这些。而实际上两者都是使用libssl来实现的,而libssl正是OpenSSL的组件之一,使用如下命令即可确认:
ssh-keygen确认命令:ldd `which ssh-keygen` |grep libssl
openssl确认命令:ldd\
which openssl
|grep libssl
以openssl为例:
[root@liumiaocn ~]# ldd `which openssl` |grep libssllibssl.so.1.1 => /usr/local/lib64/libssl.so.1.1 (0x00007f38432f1000)
[root@liumiaocn ~]#
ssh-keygen使用的也是libssl,由于本环境中手动安装和更新的1.1.1版本的OpenSSL,而ssh-keygen所使用的链接库仍然指向1.0.2版本的libssl,可以手动
[root@liumiaocn ~]# ldd `which ssh-keygen` |grep libssllibssl.so.10 => /lib64/libssl.so.10 (0x00007f9b1e445000)libssl3.so => /lib64/libssl3.so (0x00007f9b1e1f3000)
[root@liumiaocn ~]# ls -l /lib64/libssl.so.10
lrwxrwxrwx. 1 root root 16 Dec 8 00:32 /lib64/libssl.so.10 -> libssl.so.1.0.2k
[root@liumiaocn ~]# ls -l /lib64/libssl.so.1.0.2k
-rwxr-xr-x. 1 root root 470376 Aug 8 21:38 /lib64/libssl.so.1.0.2k
[root@liumiaocn ~]#
使用openssl配置ssh连接
相较于使用ssh-keygen,使用openssl也可以设定用于ssh连接的非对称密钥对,接下来以RSA密钥对为例进行设定方式的说明。
步骤1: 生成私钥
执行命令示例:openssl genrsa -3 -out rsa_key.private
执行日志示例如下所示:
[root@liumiaocn ~]# mkdir sshtest
[root@liumiaocn ~]# cd sshtest/
[root@liumiaocn sshtest]# openssl genrsa -3 -out rsa_key.private
Generating RSA private key, 2048 bit long modulus (2 primes)
......................................................................................+++++
....................+++++
e is 3 (0x03)
[root@liumiaocn sshtest]# cat rsa_key.private
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA53Ab1rRtgEL4/UkoPr10ukOX16DFwb5F77XnuEpyHHd6t30p
3rfaaSwxBUecUllYOBkU7AgT+VK4jFebaXyvhiErZH2iyqL3/7WY6/ik4KKjwAUl
xSVvMV0C9mZv7BzMjuGliFPZ9cX3YG2g5bsxamkyeqhgJdYg/HSolrnP+8m3aPpN
Ra6z35v3t5pkOr7Rh7PnqfHAtyJp2Feo1vc5kdOYZp+26aMgo1NEz93y0KRsTRM4
VC2+zvk8FVFDCPFzAOxWjUx4bEIDbLK5LzB9jsQu8422CDqrbnSVZFqLMR9iEHQr
kcRGwEdLGvluX8iPKrEhyjOVrqyHhxTmoa6BCwIBAwKCAQEAmkq9Oc2eVYH7U4Ya
1H5N0YJlOmsugSmD9SPv0DGhaE+nJP4b6c/m8Mggri+9jDuQJWYN8rANUOHQXY+8
8P3KWWtyQv5shxdP/85l8qXDQGxtKq4ZLhj0y5NXTu71SBMzCevDsDfmo9lPlZ5r
Q9Ig8Zt2/HBAGTlrUvhwZHvf/S/gLYq6GM1m6FWQPsVbiqhT23GcwkTHQgQcFafQ
7i/mQOCOdYzp87rkcntTCWZyzFmqEL9tYda1o5L1JgXxNceOTqY4ziPXGcPz5uiM
rOtYcv9ZysUeC7K/pAxQINhhnQ9F9+ToUjxRf92MFduw/ZaKvDqq9NcG5IkpAzab
Fz4lmwKBgQD8dgM1PCtxd6FMGvgfnZY1iqjDqV1x6+J9BPyMq4JjwLZRa4s2SrpT
Miwhtx6WKc6ZFd0V8WXobksF/2e/6kB0KmBu4r9+DKHiKCUHCZ3v0MZYVEcRiNMS
UBq37z5TqzKp0Hu1s8UxVBbTTkKnot6xufjEJEGCyyLjefYi3D+xJwKBgQDqrqcA
5E8oC3pTPno7TSweM+C43S0j6DnCst9ixiz8b8xxSsEhsVB2xW4miqWwdE9UHhb+
UAXF61HGXOCZTgWpYJKSdVc3uPozajDfIjGJEX7P7x73bdt5qEdlQ9elGlXPTCEZ
YqSbLGQlq+09QIgNVmBdNq+IjLvmiEzbIpGXfQKBgQCoTqzOKBz2T8DdZ1AVE7l5
BxstG5OhR+xTWKhdx6xCgHmLnQd5hybiIXLBJL8Oxom7Y+i5S5lFntyuqkUqnCr4
HEBJ7H+pXcFBcBivW76f4IQ64toLsIy24BHP9NQ3x3cb4FJ5IoN2OA83iYHFFz8h
JqXYGCush2yXpqQXPX/LbwKBgQCcdG9V7YoaslGM1FF83h1pd+sl6MjCmtEsdz+X
LsioSohLhytry4r52PQZscPK+DTivrn+4APZR4vZk0BmNAPGQGG2+OTP0KbM8XXq
FsuwtlSKn2n6STz7xYTuLTpuEY6KMsC7lxhncu1ucp4o1bAI5EA+JHUFsyfvBYiS
Fwu6UwKBgECb1go6KKl1vgbDizK233Q/udI/EasydD8rv1ZMoiC57JevkfigYPCD
PV3WZwBHGoLmI2fJ+NK5bHJ0av7x8WOkLhGnyr9HKCDbmRLVrmI5QacbAzdIVmrE
e52gFyTIbxFWiT7s0yExrqQhh340Bou0v81o8ZJGJ0p82AzMcE48
-----END RSA PRIVATE KEY-----
[root@liumiaocn sshtest]#
步骤2: 生成公钥
使用私钥,执行如下命令则可生成公钥:
执行命令示例:openssl rsa -pubout -in rsa_key.private -out rsa_key.public
执行日志示例如下所示:
[root@liumiaocn sshtest]# ls
rsa_key.private
[root@liumiaocn sshtest]# openssl rsa -pubout -in rsa_key.private -out rsa_key.public
writing RSA key
[root@liumiaocn sshtest]# cat rsa_key.public
-----BEGIN PUBLIC KEY-----
MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEA53Ab1rRtgEL4/UkoPr10
ukOX16DFwb5F77XnuEpyHHd6t30p3rfaaSwxBUecUllYOBkU7AgT+VK4jFebaXyv
hiErZH2iyqL3/7WY6/ik4KKjwAUlxSVvMV0C9mZv7BzMjuGliFPZ9cX3YG2g5bsx
amkyeqhgJdYg/HSolrnP+8m3aPpNRa6z35v3t5pkOr7Rh7PnqfHAtyJp2Feo1vc5
kdOYZp+26aMgo1NEz93y0KRsTRM4VC2+zvk8FVFDCPFzAOxWjUx4bEIDbLK5LzB9
jsQu8422CDqrbnSVZFqLMR9iEHQrkcRGwEdLGvluX8iPKrEhyjOVrqyHhxTmoa6B
CwIBAw==
-----END PUBLIC KEY-----
[root@liumiaocn sshtest]# ls
rsa_key.private rsa_key.public
[root@liumiaocn sshtest]#
步骤3: 公钥格式转化
将公钥使用ssh-keygen进行格式转化即可完成ssh连接所使用的密钥对的准备,执行命令如下所示:
执行命令示例:ssh-keygen -f rsa_key.public -i -mPKCS8 >id_rsa.pub
执行日志示例如下所示:
[root@liumiaocn sshtest]# ls
rsa_key.private rsa_key.public
[root@liumiaocn sshtest]# ssh-keygen -f rsa_key.public -i -mPKCS8 >id_rsa.pub
[root@liumiaocn sshtest]# ls
id_rsa.pub rsa_key.private rsa_key.public
[root@liumiaocn sshtest]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABAwAAAQEA53Ab1rRtgEL4/UkoPr10ukOX16DFwb5F77XnuEpyHHd6t30p3rfaaSwxBUecUllYOBkU7AgT+VK4jFebaXyvhiErZH2iyqL3/7WY6/ik4KKjwAUlxSVvMV0C9mZv7BzMjuGliFPZ9cX3YG2g5bsxamkyeqhgJdYg/HSolrnP+8m3aPpNRa6z35v3t5pkOr7Rh7PnqfHAtyJp2Feo1vc5kdOYZp+26aMgo1NEz93y0KRsTRM4VC2+zvk8FVFDCPFzAOxWjUx4bEIDbLK5LzB9jsQu8422CDqrbnSVZFqLMR9iEHQrkcRGwEdLGvluX8iPKrEhyjOVrqyHhxTmoa6BCw==
[root@liumiaocn sshtest]#
步骤4: ssh连接事前确认与准备
~/.ssh目录下只有know_hosts的设定,使用ip连接本机时提示密码输入,说明没有进行ssh的密钥对的设定或者设定不成功,这里由于根本没有密钥对,所以是有设定。
[root@liumiaocn sshtest]# ls ~/.ssh
known_hosts
[root@liumiaocn sshtest]# ssh 192.168.163.121
root@192.168.163.121's password:
将openssl生成的公钥和私钥拷贝过去
[root@liumiaocn sshtest]# ls
id_rsa.pub rsa_key.private rsa_key.public
[root@liumiaocn sshtest]# ls ~/.ssh
known_hosts
[root@liumiaocn sshtest]# cp id_rsa.pub ~/.ssh
[root@liumiaocn sshtest]# cp rsa_key.private ~/.ssh/id_rsa
[root@liumiaocn sshtest]# ls ~/.ssh
id_rsa id_rsa.pub known_hosts
[root@liumiaocn sshtest]#
注意事项:
- 公钥需要使用转化后的文件(id_rsa.pub)
- 私钥内容不需要改变,名称需要修改为id_rsa
步骤5: 使用ssh-copy-id设定密钥对
使用ssh-copy-id或者手动设定authorized_keys文件均可, 本文中直接使用ssh-copy-id命令,执行日志示例如下所示:
[root@liumiaocn sshtest]# ssh-copy-id -i 192.168.163.121
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.163.121's password: Number of key(s) added: 1Now try logging into the machine, with: "ssh '192.168.163.121'"
and check to make sure that only the key(s) you wanted were added.[root@liumiaocn sshtest]#
[root@liumiaocn sshtest]# ls ~/.ssh
authorized_keys id_rsa id_rsa.pub known_hosts
[root@liumiaocn sshtest]#
步骤6: ssh连接确认
使用ssh连接192.168.163.121,发现ssh密钥设定已经成功,ssh命令执行时已经不再需要输入密码了。说明openssl执行生成的密钥对也是完全可以使用的。
[root@liumiaocn sshtest]# ssh 192.168.163.121 hostname
liumiaocn
[root@liumiaocn sshtest]#
总结
使用openssl生成ssh连接所需要的密钥对,相较于ssh-keygen提供了更多可设定的选择,可根据需要使用,这也是openssl众多功能中非常小的一项应用。
SSL基础:4:使用openssl生成ssh的非对称密钥对相关推荐
- SSL基础:2:OpenSSL LTS版本升级方法
OpenSSL目前属于LTS 1.0.2系列和1.1.1系列并存的状态,前者将在2019年底完成使命退出支持,而1.1.1的LTS版本将会支持至2023年9月11号为止.在yum或者apt-get的源 ...
- SSL基础:3:OpenSSL概要介绍
OpenSSL非常强大,从加密/解密到证书的创建与管理,几乎无所不能,这篇文章简单介绍一下openssl的概要信息以及openssl命令的使用示例. 概要信息 OpenSSL的概要信息如下表所示: 项 ...
- SSL、OPENSSL、SSH、OPENSSH
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议.TLS与 ...
- SSL数字证书(三)使用 openssl 生成证书
数字证书原理(〇)认识SSL SSL数字证书(一)CA.根证书与数字证书 SSL数字证书(二)使用makecert.exe签发证书 SSL数字证书(三)使用 openssl 生成证书 转载自<使 ...
- OpenSSL 生成 ssl 证书
openssl 可以生成证书,但只是 "自制证书",我们自己来使用.因为我们生成的证书,不被各种浏览器认可,所以一般用于本机来测试.openssl 的介绍:https://segm ...
- 使用OpenSSL生成CSR文件,并申请全球通用SSL证书
使用OpenSSL生成CSR文件,并申请全球通用SSL证书 http://www.openssl.org 上只有OpenSSL的原代码下载,为了方便Windows用户使用OpenSSL,我们特地为您准 ...
- 通过openSSL生成自签名的SSL证书
自签名证书:就是 指的根证书,就是颁发者:和颁发给: 是相同的.证书的签名是用证书里的公钥对应的私钥进行的签名.这样的证书除非是受信任的颁布机构颁发f,一般是不被第三方信任.一般用于内部使用及测试使用 ...
- OPENSSL生成SSL自签证书
OPENSSL生成SSL自签证书 目前,有许多重要的公网可以访问的网站系统(如网银系统)都在使用自签SSL证书,即自建PKI系统颁发的SSL证书,而不是部署支持浏览器的SSL证书. 支持浏览器的SSL ...
- 使用OpenSSL生成SSL证书的教程
OpenSSL是一个加密软件库或工具包,它使计算机网络上的通信更加安全,可以使用其命令来创建SSL证书.OpenSSL采用apache授权许可,将工具包用于商业或非商业目的,下面就来看下CS如何利用O ...
最新文章
- SMOTE过采样方法
- 改造Dubbo,使其可以对接口方法进行注解配置
- asp.net 2.0中新增的AppendDataBoundItems
- 如何快速实现高并发短文检索-转
- 电离辐射防护与辐射源安全基本标准_辐射防护与安全机考难点考点解析辐射防护标准...
- eui加载时间长_面试官:为什么 HashMap 的加载因子是0.75?
- QT乱码总结3.UNICODE有无BOM
- 解决Vue报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location
- python连乘函数_动态规划之矩阵连乘问题Python实现方法
- linux下的C语言开发(多线程编程)
- 案例-热点图(CSS3)
- stm32 带通滤波器_带通滤波器详解_带通滤波器工作原理_带通滤波器原理图
- git push reject 解决方案
- Taro 3 正式版发布!京东推出开放式跨端跨框架方案,这些React、Nerv、Vue、jQuey都能支持上了!...
- linux 进程 内存 耗光,Linux内存耗尽原因分析
- python pdf分割_Python分割PDF
- 计算器软件测试数据,计算器软件测试报告.doc
- vue滚动条插件vue-happy-scroll
- FAT、FAT32和exFAT文件系统
- 二见钟情之SQL语句嵌套查询
热门文章
- 敏捷过程(小规模团队敏捷开发)
- 如何改变讨好型人格?修
- YAMAHA机器人(EtherNet/IP)与西门子S71500系列PLC(PROFINET)通讯
- Linux 之父亮相,OpenCloudOS 社区开放日来了
- JS图片loading及放大查看效果(兼容IE,FF)
- ansible 和文件复制相关的几个模块(templete和copy的区别)
- c语言作业竖输出,c语言中竖怎么打
- 仿京东商城html5模版,html5仿京东手机WAP商城网站模板
- JavaScript/HTML的压缩和转义
- LIMS如何有效降低实验室风险