概述

很久之前就想研究一下 ssh 的多秘钥管理,今天正好有时间就研究了一下,挺简单的,记录下来,供以后开发时参考,相信对其他人也有用。

参考资料:

Git - 生成 SSH公钥 , Linux 下多密钥管理

.ssh/config 文件的解释算法及配置原则

查看 ssh-keygen 命令信息

我们首先查看一下 ssh-keygen 这个命令的信息,先使用 man :

man ssh-keygen

提示没有手册信息:

No manual entry for ssh-kengen

那我们再使用 info :

info ssh-keygen

能显示 ssh-keygen 的各个参数信息,具体可以自己看。

生成 ssh 多秘钥

一般我们生成 ssh 的命令是:

ssh-keygen -t rsa

但是这会覆盖原先的秘钥。那怎么生成一个新的不覆盖旧的秘钥呢?我们先来介绍一下 ssh-keygen 的相关指令

ssh-keygen 参数:

-t 指定密钥类型,默认是 rsa ,可以省略。
-f 指定密钥文件存储文件名。
-C 设置注释文字,比如邮箱。

所以我们只需要使用 -f 参数即可:

// 生成 github 的 ssh
ssh-keygen -t rsa -f ~/.ssh/id_rsa.github

需要注意的是,-C 表示注释,不一定要填邮箱。

ssh 秘钥复制

生成 ssh 秘钥之后我们需要复制它然后填到 github 里面去,复制命令是:

clip < ~/.ssh/id_rsa.github.pub

有些 shell 里面没有 clip 这个命令,这个时候如果是 mac 的话,可以使用 pbcopy 命令

// 方法一:使用 <
pbcopy < ~/.ssh/id_rsa.github.pub // 方法二:使用管道
cat ~/.ssh/id_rsa.github.pub | pbcopy

ssh 测试是否能够连接成功

然后我们来测试一下能不能免密连接:

ssh -T git@github.com

提示不能连接,因为需要我们配置一下 config 文件。

ssh 多秘钥管理

一般我们生成了多秘钥之后,默认是不生效的,需要我们配置一下 config 文件。配置模板如下:

Host github
HostName github.com
IdentityFile ~/.ssh/id_rsa.github
User git

每一行的解释如下:

// 设置别名为 github
// 域名为 github.com
// 使用 ssh 文件为 ~/.ssh/id_rsa.github
// 用户为 git

这个设置别名的功能非常方便,在设置了别名之后,我们只需要用别名就可以测试是否能够连接成功

ssh -T github

这个时候就能收到成功提示:

Hi xxxxxxx! You've successfully authenticated, but GitHub does not provide shell access.

一个坑

在用如上方法设置之后,能够正常登陆,但是关机后再开机,又不能正常登陆了,这个时候需要把 rsa 添加到 ssh 高速缓存里面去,命令如下:

ssh-add -K ~/.ssh/id_rsa

那我们肯定不能每次开机都要输入上面的命令吧,我们需要开机自动运行上面的命令:

// 创建 .bash_profile
touch ~/.bash_profile
// 在 .bash_profile 中写入命令
echo 'ssh-add -K ~/.ssh/id_rsa' >> ~/.bash_profile

然后在开机的时候就会自动运行 ~/.bash_profile 里面的命令了。

但是如果我们使用了别的 bash 比如 zsh,上述的方法可能会不管用,这个时候我们需要打开 zsh 的配置文件,用配置文件来启动 ~/.bash_profile 这个文件

// 打开 zsh 的配置文件
open ~/.zshrc
// 写入下面的代码
source ~/.bash_profile

或者直接用下面的命令写入:

echo 'source ~/.bash_profile' >> ~/.zshrc

注意:echo 命令后面如果使用单引号则表示写入代码片段,会自动换行;如果使用双引号则表示写入单一字段,不会自动换行

ssh 多秘钥管理和坑的更多相关文章

  1. ssh分发秘钥时出现错误“Permission denied (publickey,gssapi-keyex,gssapi-with-mic)”

    因为公司的服务器连接是通过xshell公钥和密码连接的,今天在ssh分发秘钥的时候出现了,下面的错误: [root@iZ2ze97cumk8opqm28h8Z .ssh]# ssh-copy-id - ...

  2. Linux SSH 免秘钥登录

    SSH 免秘钥登录 ssh:是一种安全加密协议 ssh  username@hostname     ssh gongziyuan.com:以当前用户登录该机器(如果不是当前用户,需要这么干:ssh ...

  3. ansible-playbook 打通ssh无秘钥

    建议参考: http://www.cnblogs.com/jackchen001/p/6514018.html 这个代码清晰,效果佳! 参考链接: http://www.cnblogs.com/cao ...

  4. linux下ssh免秘钥登录

    1.检查防火墙是否关闭 (1)切换到root用户 (2)查看防火墙状态 service iptables status 这是没有关闭 (3)设置关闭 service iptables stop 2.检 ...

  5. 服务器做ssh免秘钥登陆

    集群内服务器做非root用户免秘钥登陆:1.node1新建用户abc1,制作公钥.私钥(一路回车键即可)ssh-keygen –t rsa将自动在/home/abc1/.ssh/目录下创建公私钥文件如 ...

  6. centos7实现ssh免秘钥分发

    centos7的秘钥分发与centos6的秘钥分发还有点不一样,今天在给朋友排坑,在网上找了半天,也没有一个好解决方法,就只能自己研究,今天就把我解决的问题分享出来:那么如何实现centos7秘钥分发 ...

  7. 配置SSH无秘钥登录

    [hadoop@hadoop01 ~]$ cd .ssh [hadoop@hadoop01 .ssh]$ ls authorized_keys id_rsa id_rsa.pub known_host ...

  8. ssh免秘钥登录

    简介 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程 ...

  9. SSH设置秘钥登录

    设置 SSH 通过密钥登录 我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器.但是,一般的密码方式登录,容易有密码被暴力破解的问题.所以,一般我们会将 SSH 的端口设置为默 ...

随机推荐

  1. 初探CSS - 5 创建

    CSS 创建 当读到一个样式表时,浏览器会根据它来格式化 HTML 文档. 如何插入样式表 插入样式表的方法有三种: 外部样式表(External style sheet) 内部样式表(Interna ...

  2. 【vue】canvas验证码组件--数字/数字加字母

    基于canvas的数字/数字+字符验证码   SIdentify.vue 组件 <!-- 基于canvas的数字/数字+字符验证码 --> <!-- 调用格式 <s-ident ...

  3. 终于明白上一篇的一顿误操作是什么了,是$,不是S !!!!!

    1,在命令行中输入export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin这样可以保证命令行命令暂时可以使用.命令执行完之后先不要关闭终端2. ...

  4. 23_1spring基础

    1.spring是什么 2.spring的优势 3.spring体系结构 4.耦合 程序间的依赖关系:类之间的依赖和方法之间的依赖. 解构:降低程序间的依赖关系. 实际开发中应该做到:编译期不依赖,实 ...

  5. 【学习】024 springCloud

    单点系统架构 传统项目架构 传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一个项目中. 优点:适合于个人或者小团队开发,不适合大团队开发. 分布式项目架构 根据业务需求进行拆分成N个子 ...

  6. Linux下vim显示行数

    在Linux环境下的编辑器有vi.vim.gedit等等.进入这些编辑器之后,为了方便我们需要编辑器显示出当前的行号,可偏偏编辑器默认是不会显示行号的.我们有二种办法可以解决: 第一种是,手动显示:在 ...

  7. Java并发编程实战 第4章 对象的组合

    Java监视器模式 java监视器模式就是在将共享的数据封装在一个类里面,然后然后所有访问或者修改这些数据的方法都标注为synchronize. 车辆追踪模拟: 使用监视器模式: CarTracker ...

  8. Spring + Mybatis 企业应用实战 第1章 Java EE应用

    Java EE应用的分层模型: Domain Object 领域对象层.就是一些pojo. DAO(data access object) 数据访问对象 Service 业务逻辑层 Controlle ...

  9. ArrayList为什么是线程不安全的

    首先需要了解什么是线程安全:线程安全就是说多线程访问同一代码(对象.变量等),不会产生不确定的结果. 既然说ArrayList是线程不安全的,那么在多线程中操作一个ArrayList对象,则会出现不确 ...

  10. Vue路由参数设置可有可无

    参数后面使用 ? id 后面加个 ‘ ? ’ ,将 id 设置为可选参数 { name: "index", path: '/p/:id?', component: resolve ...