背景
传统的Telnet、FTP协议都是使用明文传输数据,存在一定的安全风险,如果传输数据被截取,可能造成数据泄露风险,尤其对于敏感数据,泄露造成的损失无法估计。最近公司、github等平台都不再支持http方式进行代码下载工作,需要通过ssh模式进行数据传输。
什么是ssh
是一种网络安全协议,对传输的数据进行加密和安全验证,保证数据的安全。
为什么使用ssh
如果数据裸着在网上跑,被劫持的话只能任人摆布,风险无限大,可能造成个人信息泄露、公司机密泄露;
ssh-keygen的基本使用
基本配置参数
参数 | 说明 | 备注 |
---|---|---|
-t | 指定算法类型 | 常见的算法包括:rsa、dsa、ecdsa、ed25519 |
-f | 指定新生成的秘钥对的文件名称 | 例如:-f ~/.ssh/test,生成的公钥、私钥名称为test.pub、test |
-c | 生成秘钥对的备注信息 | 例如:-c ‘给github使用的秘钥对’ |
注:详细配置参数可以参考文章最后的文档链接。
完整的使用示例
现在开始进入演示场景了,各位可以看好。。
第一幕:github要使用ssh协议传输
生成需要的秘钥对
假设要使用ed25519这个协议算法,那可以使用"-t"这个参数指定协议。为了防止本地测试时新生成的密钥对干扰已生成的,使用"-f"这个参数指定新生成的秘钥对放到测试文件中。
上述截图的核心命令为:ssh-keygen -t ed25519 -f ~/sshtest/id_ed25519
通过执行上述命令,生成了一个私钥和公钥文件:id_ed25519、id_ed25519.pub。
将生成的公钥配置到github上
经过上述的两个步骤,就可以通过ssh跟github交互了
第二幕:公司私服也要切到ssh协议传输
注:为了防止新生成的ssh秘钥对跟分配给github的秘钥对冲突,一定要指定一个不同的文件名,防止把之前的秘钥对覆盖了
生成新的秘钥对
如果公司要求也用ed25519加密算法,同时为了防止新生成的秘钥对覆盖之前的秘钥对,需要指定一个不同的文件名。
ssh-keygen -t ed25519 -f ~/sshtest/company_ed25519
如上图所示,-t指定的算法跟github密钥对算法是一样的,但是-f指定的文件路径是有所区别。在途中可以看到生成了两个秘钥对。
将新生成的公钥配置到服务端上
按照github类似的操作,在公司的私服上配置新生成的公钥即可。
第三幕:请求ssh连接时,到底选择哪一个秘钥对呢?
当本地存在多个 SSH 私钥对时,SSH 客户端(如 OpenSSH)会按照以下顺序尝试使用这些密钥对进行连接:
-
命令行指定的密钥:如果你在ssh命令中使用-i选项指定了某个私钥文件,SSH 客户端将首先尝试使用该密钥进行连接。
-
默认的密钥文件:如果没有在命令行中指定密钥,SSH 客户端会检查以下默认的密钥文件(以此顺序):
~/.ssh/id_rsa(RSA)
~/.ssh/id_dsa(DSA)
~/.ssh/id_ecdsa(ECDSA)
~/.ssh/id_ed25519(Ed25519) -
.ssh/config文件中的配置:如果在~/.ssh/config文件中为特定主机配置了IdentityFile选项,SSH 客户端将使用该文件指定的私钥进行连接。
-
其他可用的密钥:如果以上步骤都没有找到合适的密钥,SSH 客户端将尝试使用其他在~/.ssh/目录下找到的私钥文件进行连接。
如果 SSH 客户端找到了多个可能的密钥,它将依次尝试每个密钥,直到找到一个可以成功进行身份验证的密钥或尝试所有密钥都失败。为了避免这种尝试过程,你可以在~/.ssh/config文件中明确指定要使用的私钥文件。
注:通过在~/.ssh/config这个文件中指定每一个host使用哪一个密钥对是一个一劳永逸的写法。
参考文档
1、官方文档:https://www.ssh.com/academy/ssh/keygen
2、ssh介绍说明: https://info.support.huawei.com/info-finder/encyclopedia/zh/SSH.html