前言

当我们从 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. springmvc05-json交互处理

    什么是json: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛. *采用完全独立于编程语言的文本格式来存储和表示数据 ...

  2. 4.26JMetre分离数据、响应断言、动态参数、响应管理

    修改 查询 默认查询 断言: 1.JSON断言 2.响应断言 :实际返回的值是否包含期望的值 参数化 相同的测试步骤,不同的测试数据.比如针对测试平台,使用不同的用户登陆进去来验证产品管理的业务. 在 ...

  3. Linux主流发行版本配置IP总结(Ubuntu、CentOS、Redhat、Suse)

    我们先了解下IP的概念 IP地址简介 电脑连接互联网的必要条件:IP地址+子网掩码+网关+DNS IP地址是上网的唯一标识 - IPv4地址分类: IPv4地址分为A-E共计5类地址,其中A.B.C是 ...

  4. vue3 vite 系统标题 系统名称统一配置

    想要统一配置系统名称 或者其他的,需要在vue3中使用 vite 的环境变量 vite 的环境变量 需要创建两个文件(和 vite.config.js 文件同一目录) .env.development ...

  5. 【HarmonyOS学习笔记】Slider组件实现图形可调旋转

    哈喽大家好我是厚脸皮的小威 之前刚刚用华为的IDE跑通"HELLO,WORLD" 趁热又想去试试看跑一下基于TS拓展API接口的Slider组件,去实现图片的放大和缩小 凭借着大学 ...

  6. 力扣算法:LC 704-二分查找,LC 27-移除元素--js

    LC 704-二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 ...

  7. VMware虚拟机中安装Linux操作系统(ubuntu)

    一.准备工作: 1.下载VMware虚拟机 下载地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evalua ...

  8. Python技法:浮点数取整、格式化和NaN处理

    1. 取整的三种方法 1.1 强转int类型 这种方法会直接对浮点数的小数部分进行截断(无论是正还是负). print(int(2.7)) # 2 print(int(-2.7)) # -2 1.2 ...

  9. Git标签用法

    我们通常会在项目开发到一定阶段时给代码打上标签. 1.Git查看所有标签及其描述信息 git tag -l -n 2.Git创建标签 创建标签并添加描述信息 git tag -a v1.0.0 -m ...

  10. RealEvo-IDE安装

    双击"InstallWizard.exe"启动安装程序 点击"Install RealEvo-IDE"启动 RealEvo-IDE 安装程序 选择"下 ...