Ubuntu下如何管理多个ssh密钥
Ubuntu下如何管理多个ssh密钥
前言
我一直在逃避这个问题,误以为我能够单纯地用一个 ssh 走天下。
好吧,现实是我不得不管理多个 ssh 做,那就写个博客总结一下吧。
查阅后发现前人已经总结了不少,那我就结合之后,再发展一下吧,参考资料按照 markdown 的规范,放在文末。
Note:
- 笔者
Ubuntu 为24.04 LTS
目录
如何生成并添加第一个密钥
ssh-keygen -t rsa -C "youremail@yourcompany.com"
然后一路回车,就会在
~/.ssh 下生成id_rsa,id_rsa.pubssh-add ~/.ssh/id_rsa
将密钥
id_rsa 添加到ssh-agent 中。ssh-add -l
可以通过该命令来确认私钥列表。
ssh-add -D
该命令可以清空私钥列表。
至于如何配置 gitee 和 github 等,则默认都会,这篇文章的重心在于如何管理多个 ssh 密钥。
生成并添加多个密钥
生成并添加多个密钥,我们就需要编辑 config 文件。
ssh-keygen -t rsa -C "username@address"
然后,它就会让你
Enter file in which to save the key,以及有一个默认的路径。可以手动输入自己想要保存的路径(绝对路径)。
之后,会让你
Enter passphrase (empty for no passphrase),就是输入口令,空则无口令。这个口令,是用来加密你的私钥的,避免你的私钥泄漏后,任何人都能用这个私钥冒充你。确认一遍口令,
Enter same passphrase again。接下来就会告诉你
identification 私钥被存在哪里,以及public key 公钥被存在哪里等等信息。ssh-add ~/.ssh/your_identification
我们将其添加到
ssh-agent 中。vim ~/.ssh/config
创建
ssh 的config 文件。# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/your_identification
User You # github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/your_identification
User You
Host: 取任意名字
HostName: 这个是真实的域名地址
IdentityFile:这里是identification (私钥)的地址
PreferredAuthentications:配置登录时用什么权限认证
User:配置使用用户名PreferredAuthentications
keyboard-interactive
交互式认证方式,当 SSH 客户端尝试连接到服务器时,如果服务器配置为使用
keyboard-interactive 认证,服务器会向客户端发送一系列问题(通常是用户名和密码),客户端需要提供答案。password
需要输入用户名和密码来连接服务器。
publickey
用户生成密钥对,将公钥配置在服务器上,连接服务器时,服务器会要求用户提供公钥对应的私钥来证明身份。
ssh -T git@[Host]
配置完成后,你就可以通过上面的命令来检验是否配置正确。
算力平台与服务器
password 或 keyboard-interactive 登录
通常,你只能获得服务器地址,用户名和密码(也就是,你不能编辑服务器的 ssh 设置的话)。这种情况下,我们只能这样进行 config 文件的编辑,即不设置 IdentityFile,PreferredAuthentications 设置 password 或者 keyboard-interactive :
Host platform
HostName address
PreferredAuthentications keyboard-interactive
User You
配置 publickey 登录
如果说,你能编辑服务器的 ssh 设置,或者说你能获得服务器的 ~/.ssh/authorized_keys 的文件中所允许的公钥所对应的密钥的话,那么,我们就可以去设置 publickey 登录。
我们以 Ubuntu 服务器为例。
在能够连接到服务器的前提下(无论是用
password 方式登录也好,还是远程桌面也好,亦或者是直接在网页登录也好)首先,假设服务器(你试图连接的)和客户端(你目前在用的电脑之类的)上没有密钥对
生成一个密钥对,并添加私钥到客户端(具体操作看前面)
把公钥使用
ssh-copy-id 复制到远端服务器(成功的话,就会自动将公钥添加到服务器的~/.ssh/authorized_keys文件中,并且会处理好目录和文件权限的问题)ssh-copy-id [options] user@host-ip
如果你的服务器没有 openssh 服务器的话(大部分情况下都会预下载有),你可以通过下面的命令来安装
sudo apt -y update
sudo apt -y install openssh-server
然后输入下面的命令检查 SSH 服务状态
systemctl status ssh
不出意外,会看到
active (running) 类似的字样。如果说,没有启动的话,通过下面的命令启动
systemctl start ssh
有人或许会问,我直接复制公钥内容粘贴可以不,当然可以,只是步骤稍微复杂一点,你需要手动处理一个问题
- 你需要手动将公钥的内容,添加到
~/.ssh/authorized_keys 文件中
- 你需要手动将公钥的内容,添加到
你需要编辑服务器的 SSH 配置文件
/etc/ssh/sshd_configsudo vim /etc/ssh/sshd_config
找到
#Port 22 修改端口号(16位数字)为一个合适的数字,注册端口(Registered Ports) \([1024,49151]\) 或者动态或私有端口(Dynamic or Private Ports) \([49152,65535]\),假设我们设置为 8888编辑 config 文件
Host ExampleHost
HostName 192.168.1.100
Port 8888
PreferredAuthentications publickey
IdentityFile ~/.ssh/example_rsa_key
User user
ssh -T user@[Host] -p [Port] 测试一下能否连接
还有一种情况,你能获取服务器的 ssh 私钥(即服务器上有密钥对),那么你要做的很简单:
- 添加你所获取到的密钥到客户端的
ssh-agent - 确认
~/.ssh/authorized_keys 中有无获取的密钥的公钥,无则添加 - 确认
/etc/ssh/sshd_config 的配置,端口号等信息 - 编辑 config 文件
-
ssh -T user@[Host] -p [Port] 测试一下能否连接
连接gitee,但出现问题
你可能会看到类似这样的信息,如果你直接回车,就会告诉你 Host key verification failed ,然后就退出来,无法连接:
The authenticity of host 'gitee.com (180.76.198.77)' can't be established.
ED25519 key fingerprint is SHA256:+ULzij2u99B9eWYFTw1Q4ErYG/aepHLbu96PAUCoV88.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
这是 SSH 客户端用来防止中间人攻击(MITM)的的措施,当你第一次连接到一个 SSH 服务器时,客户端会要求你确认服务器的密钥指纹是否与你已知的指纹匹配。如果指纹匹配,你可以确信你正在连接到正确的服务器。
也就是说,我们需要自己确认一下服务器的密钥指纹是否正确,如果正确,我们要进行添加才能避免这样的信息出现。
如果我们确认密钥指纹正确,我们就可以输入 yes 的选项,则会有下面的信息:
Warning: Permanently added 'gitee.com' (ED25519) to the list of known hosts.
警告我们,已经永久把这个服务器的密钥指纹添加到已知指纹中了。
此后再连接 gitee.com ,就不会出现这样上面的问题了。
结合 vscode 使用
结合 vscode 使用很简单,下载对应的插件即可(如果前面你已经在相应文件下写了 config 文件的话)。
个人下载了下面的插件:
- Remote - SSH
- Remote - SSH: Editing Configuration Files
- Remote - Tunnels
- Remote Explorer
然后,不出意味的话,点击左边旁栏的 Remote Explorer 就可以看到先前已经配置好的远程服务器了。
参考资料
- git配置多个ssh key: https://www.cnblogs.com/acelin/p/15015719.html
- git配置多个SSH密钥: https://www.cnblogs.com/muzidaitou/p/13163407.html
- github/gitlab 管理多个ssh key: https://www.cnblogs.com/fanyong/p/3962455.html
Ubuntu下如何管理多个ssh密钥的更多相关文章
- Mac OS X下配置远程Linux 服务器SSH密钥认证自动登录
1. 在本地机器创建公钥 打开万能的终端,执行如下命令,无视一切输出,一路欢快地回车即可. ssh-keygen -t rsa -C 'your email@domain.com' -t 指定密钥类型 ...
- Git管理多个SSH密钥,Git多帐号配置
版权声明:转载须标明本文转自严振杰的博客 https://blog.csdn.net/yanzhenjie1003/article/details/69487932版权声明:转载必须注明本文转自严振杰 ...
- ubuntu下显卡管理
1 Ubuntu下卸载ATI显卡驱动并还原开源驱动[转] 首先卸载已经安装的ATI显卡驱动:cd /usr/share/ati/sudo ./fglrx-uninstall.sh 接着执行下面的代码: ...
- SourceTree Git可视化管理工具通过 ssh 密钥登录
整个流程分三步:① 生成SSH密钥:② Github/Gitee/Coding 代码托管平台绑定公钥:③ SourceTree 拉取代码 1.生成 SSH 密钥 这里直接使用 SourceTree 来 ...
- Ubuntu下升级Git以及获取ssh keys的代码
今天开始用的git,记下获取ssh keys 的代码 ? 1 2 3 ssh-keygen -t rsa -C "your_email@example.com" # Enter f ...
- Mac下配置远程Linux 服务器SSH密钥认证自动登录
1. 在本地机器创建公钥 打开万能的终端,执行如下命令,无视一切输出,一路欢快地回车即可. ssh-keygen -t rsa -C 'your email@domain.com' -t 指定密钥类型 ...
- Linux Ubuntu下软件包管理
自己整理的一个关于dpkg, apt, aptitude三者的常用命令,方便以后查阅. dpkg: dpkg是用来安装.deb文件,但不会解决模块的依赖关系,且不会关心ubuntu的软件仓库内的软件, ...
- Ubuntu下Hadoop的安装和配置
最近又需要要搭hadoop环境,所以开始学习,下面是我的笔记,仅供大家参考! Hadoop安装: JDK1.6+ 操作系统:Linux,Window和Unix也可以做Hadoop的开发,只有Linux ...
- Git客户端部署使用-生成ssh密钥2
1. 设置用户名 其中双引号中的 XXX 是用户名,记得替换成自己的用户名,需要注意的是这里的用户名是git服务器所使用的名称,一般公司用的都是员工名称的全拼. # 在git窗口中输入命令行: git ...
- Ubuntu下SSH设置
网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务.最终成功的方法如下: ...
随机推荐
- swagger 文件上传以及requestbody参数传递
swagger用来做普通的API测试很方便,在实际开发过程中,经常会有文件上传,或者通过reuestbody传递数据等方式. 这个时候swagger的配置就有一些特殊了 . swagger reque ...
- 谈谈区块链(18):以太坊的UTXO
https://www.8btc.com/article/117510 本来并没有计划写这篇文章,只是这两天微信里有一篇文章传播的比较厉害,叫:<其实并没有什么比特币,只有UTXO>.其中 ...
- Qt交叉编译整理的几点说明
关于交叉编译,对于初学者来说是个极难跨过去的砍(一旦跨过去了,以后遇到需要交叉编译的时候都是顺水推舟.信手拈来.),因为需要搭建交叉编译环境,好在现在厂家提供的板子基本上都是测试好的环境,尤其是提供的 ...
- Qt编写百度地图综合应用(在线+离线+区域)
一.前言 在现在很多的应用系统中,会提供一个地图模块,地图相关的应用和app也是非常多,最广泛的应用就属于导航,地图基本上分在线的和离线的两种,在线的一般都是实时的,数据也是最新的,速度很快路线很准, ...
- [转]实体类与数据库字段不匹配问题,java.sql.SQLSyntaxErrorException: Unknown column 'xxx' in 'field list'
控制台报错 ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column 'user_nam ...
- 即时通讯技术文集(第10期):IM通信协议该选TCP还是UDP [共12篇]
为了更好地分类阅读52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第10 期. [-1-] 简述传输层协议TCP和UDP的区别 [链接] http://www.52 ...
- 飞书lark机器人 自动化发版
飞书lark机器人 自动化发版 #1 介绍 开发飞书机器人接收消息并调用构建接口, 实现自动化发版 发送指令 -> 机器人接收指令 -> 调用jenkins-job远程构建与部署 jenk ...
- C:.c文件和.h文件的关系
参考:1 2 问题 在进行C语言文件移植时,遇到 "通常是每个.c文件对应一个.h文件",之前了解过.h文件是头文件,用来引用其他文件的, 但在codeblocks C语 ...
- Nginx防盗链设置
原文:https://blog.liuzijian.com/post/e2c56cc3-1002-4f41-aec8-9a69f57e3c3f.html 1.防止盗链 要防止特定路径下的图片被盗链,可 ...
- Confusion pg walkthrough Intermediate
namp ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.188.99 Starting Nmap 7.94SVN ( https://nmap.org ) at ...