前言

当我们从 GitHub 克隆某个仓库时,往往使用 HTTPS 协议,除此之外,也可以使用 SSH 协议;当我们的客户机与远端服务器连接时,更加离不开 SSH 协议。如果我们需要连接多个远程终端,那么合理配置多个 SSH 密钥就显得很有必要。

本文首发于 正切橙的博客,更多详细信息请点击 这里,转载请注明出处。


一、SSH 是什么

SSH 全称为:Secure Shell,是一种加密的网络传输协议,通过在网络中创建安全隧道来实现客户端与服务器之间的连接。SSH 在 数据传输 时基本上都采用对称加密方式,但是在进行 身份验证 时却需要采用非对称加密的形式,也就是 公钥—私钥对 的形式。

二、密钥生成工具

生成 SSH 密钥对需要使用 ssh-keygen,如今的主流操作系统 Windows、Linux 和 macOS 等往往事先已经安装好了。

三、密钥类型

SSH 生成密钥对时可以使用多种加密算法,这些加密算法生成的最常用的密钥类型是 rsa 和 ed25519。

  • rsa:最常用的公钥加密算法,使用极其广泛,并且支持较好。密钥位数越多,安全性越好,但是性能会有所降低,常见的有 RSA 2048 和 RSA 4096 等。

  • ed25519:椭圆曲线算法生成的密钥,密钥长度短,安全可靠并且具有高性能。它的安全性在 RSA 2048 与 RSA 4096 之间,但是性能却在数十倍以上。(推荐使用

ed25519 需要 OpenSSH 版本大于 6.5(2014 年的古老版本),应该不会有人的客户端和服务器不满足吧(不会吧不会吧!)

四、本地配置

ssh-keygen 生成的密钥对默认存储于家目录(Windows 的 C:\Users\xxx,Linux/macOS 的 ~)的 .ssh 文件夹中

1.单密钥配置

使用 ssh-keygen 命令选择一种密钥类型来创建

# 生成 RSA 2048 密钥
ssh-keygen -t rsa -b 2048 -C "your@email.com" # 生成 RSA 4096 密钥
ssh-keygen -t rsa -b 4096 -C "your@email.com" # 生成 ed25519 密钥
ssh-keygen -t ed25519 -C "your@email.com"
  • -t:选择生成密钥的类型
  • -b:设置密钥位数
  • -C:密钥注释,这里要改为你自己的邮箱地址

执行以上命令后,会提示你设置密钥存储路径,按 Enter 默认即可。

然后会提示你设置密码,根据需要自行选择设不设置(不设置按 Enter 即可,已经非对称加密过,不设置也问题不大;设置的话安全性会提高,但是每次连接时需要输入密码,会麻烦一点)。

以生成密钥 ed25519 为例,操作完后会在家目录的 .ssh 文件夹中生成私钥 id_ed25519 和公钥 id_ed25519.pub 两个文件。

权限设置

在 Linux 中,还需要设置私钥文件的权限才可使用:

chmod 600 ~/.ssh/id_ed25519

2.多密钥配置

如果你同时使用 GitHubGitee阿里云,都需要设置 SSH 密钥,可以将常用 SSH 登陆信息写进全局配置文件

打开终端,输入

# 创建 .ssh 文件夹
mkdir -p ~/.ssh # 进入 .ssh 文件夹
cd ~/.ssh

以下介绍以生成 ed25519 密钥为例:

# 生成 GitHub 密钥
ssh-keygen -t ed25519 -f github_ed25519 -C "your@email.com" # 生成 Gitee 密钥
ssh-keygen -t ed25519 -f gitee_ed25519 -C "your@email.com" # 生成 阿里云 密钥
ssh-keygen -t ed25519 -f aliyun_ed25519 -C "your@email.com"
  • -f:生成密钥的名称,可自行修改

在 .ssh 文件夹下创建 config 文件(~/.ssh/config

# ------------ 配置说明(始) ------------

# Host:别名,HostName:服务器域名或 IP 地址
# User:用户名
# 例:在 git clone git@github.com:torvalds/linux.git 中
# User 是 git,Host 是 github.com
# IdentityFile:私钥路径 # ------------ 配置说明(末) ------------ # ------------ 具体配置(始) ------------ # GitHub 密钥
Host github.com
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_ed25519 # Gitee
Host gitee.com
HostName gitee.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_ed25519 # Aliyun
Host my_aliyun
HostName xxx.xxx.xxx.xxx
User xxx
Port 22
PreferredAuthentications publickey
IdentityFile ~/.ssh/aliyun_ed25519 # ------------ 具体配置(末) ------------

权限设置

在 Linux 中,配置文件 config 和私钥文件的权限都需要设置才可使用:

chmod 600 config github_ed25519 gitee_ed25519 aliyun_ed25519

五、远端配置

1.GitHub/Gitee

登陆 GitHub,依次打开 Settings => SSH and GPG keys => New SSH key

然后将公钥(切记是公钥)内容粘贴过去

最后,使用 ssh 命令测试与 GitHub 的连接

ssh -T git@github.com

提示时输入 yes 即可,如果出错,可以在 -T 后面加上 -v 参数查看具体错误信息

Gitee 和 GitHub 添加方法类似,不做赘述

2.服务器

在服务器系统中找到 ~/.ssh/authorized_keys 文件(没有则创建),另起一行,将本地公钥(切记是公钥)内容粘贴过去,并设置权限:

chmod 600 ~/.ssh/authorized_keys

测试连接,以 多密钥配置阿里云 为例:

# 使用 Host 别名
ssh my_aliyun # 不使用 Host 别名
ssh xxx@xxx.xxx.xxx.xxx

SSH 多密钥配置的更多相关文章

  1. Hadoop集群搭建的密钥配置SSH实现机制的配置(2)

    [hadoop@weekend110 ~]$ ssh-keygen -t rsa 用来生产密钥对 Generating public/private rsa key pair. Enter file ...

  2. linux系统ssh免密钥登录配置

    linux主机配置ssh免密钥登录,具体配置如下: 1.执行命令ssh-keygen -t rsa,生成公钥和私钥(具体步骤详见下图) 2.会在当前用户的家目录的.ssh/生成公钥和私钥, 3.执行s ...

  3. ssh的配置,ssh打开密钥登陆,关闭密码登陆。

    刚装玩fedora,那么我们就以fedora为例来说一下怎么配置: 1.先确认是否已安装ssh服务: [root@localhost ~]# rpm -qa | grep openssh-server ...

  4. 配置SSH无密钥登陆(三)

    配置SSH无密钥登陆 (1).关闭防火墙 对每个虚拟机进行如下操作:   su    chkconfig  iptables  off 执行之后重启虚拟机:reboot (2).关闭之后,在maste ...

  5. Firefly安装ROS及ssh远程登录配置

    一.在Linux firefly 3.10.0 上安装ROS-indigo 快捷键 CTRL + ALT  + T 打开终端并安装ROS-indigo sudo sh -c 'echo "d ...

  6. 服务器间打通ssh无密钥

    1 打通无密钥 配置HDFS,首先就得把机器之间的无密钥配置上.我们这里为了方便,把机器之间的双向无密钥都配置上. (1)产生RSA密钥信息 ssh-keygen -t rsa 一路回车,直到产生一个 ...

  7. 多台计算机之间的ssh无密钥登录

    在很多分布式系统中,我们最常遇到的一个问题是,需要在服务器集群上保证多台机器之间的SSH无密钥登录.以Hadoop为例,为了方便,我们需要在master和slaves之间配置密钥登录,这样我们启动Ha ...

  8. Linux远程登录ssh免密码配置方法(仅供参考)

    这篇文章主要介绍了linux远程登录ssh免密码配置方法,需要的朋友可以参考下(http://www.0834-3659999.com) 一.情景 公司刚上几台Linux,现在要把主机之间都能远程ss ...

  9. Linux中ssh介绍与ssh+key密钥登陆部署

    环境内核信息: [root@zabbix- ~]# uname -a Linux zabbix- -.el6.x86_64 # SMP Tue Mar :: UTC x86_64 x86_64 x86 ...

随机推荐

  1. VDO虚拟数据优化

    VDOVirtual Data Optimize 虚拟数据优化 是一种通过压缩或删除存储设备上的数据来优化存储空间的技术. VDO 是红帽公司收购了 Permabit 公司后获取的新技术,并与2019 ...

  2. python学习-Day9

    目录 记忆不清点回顾 今日概要 今日内容 大作业讲解 字符编码实际应用 编码与解码 如何解决乱码的问题 文件操作简介 什么是文件 代码操作文件 代码操作文件的流程 基本语法结构 使用关键字打开文件 w ...

  3. .NET 中 GC 的模式与风格

    垃圾回收(GC)是托管语言必备的技术之一.GC 的性能是影响托管语言性能的关键.我们的 .NET 既能写桌面程序 (WINFROM , WPF) 又能写 web 程序 (ASP.NET CORE),甚 ...

  4. Rainbond结合NeuVector实践容器安全管理

    前言 Rainbond 是一个云原生应用管理平台,使用简单,不需要懂容器.Kubernetes和底层复杂技术,支持管理多个Kubernetes集群,和管理企业应用全生命周期.但是随着云原生时代的一点点 ...

  5. 机构:DARPA

    DARPA,美国国防部高级研究计划局. 2021年3月19日,英特尔(Intel)宣布与美国国防部高级研究计划局(DARPA)达成的一项新合作,旨在推动在美制造的专用集成电路(ASIC)芯片的开发. ...

  6. 767. Reorganize String - LeetCode

    Question 767. Reorganize String Solution 题目大意: 给一个字符串,将字符按如下规则排序,相邻两个字符一同,如果相同返回空串否则返回排序后的串. 思路: 首先找 ...

  7. 145_Power BI Report Server自定义Form登录

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 很久没有更新Power BI Report Server了,发现自己机器还是2021年1月版本的,现在更新了20 ...

  8. EditText简单登陆界面制作

  9. 第24章 Java 数据类型转换

    每日一句 井底点灯深烛伊,共郎长行莫围棋. 每日一句 What we call "failure" is not falling down, but the staying dow ...

  10. mybatis中返回一个List字段

    目的:在一个查询接口里面,返回一个人的信息,以及这个人所携带的东西的信息,返回效果如下: { "msg": { "listMain": [ { "id ...