使用ssh-key免密登录服务器或免密连接git代码仓库网站

ssh登录服务器场景

假设有两台机器,分别是:

源机器:主机A(hostA),ip:198.168.0.1

目标机器:主机B(hostB),ip:192.168.0.2

ssh-key免密连接原理

源机器想要使用ssh-key免密连接到目标机器,就要先了解ssh-key免密连接的原理(见下图)。

ssh-key免密连接前提

理解了上面的原理图,剩下要做的,无非就是两件事:

(一)在源机器创建ssh-key密钥对

(二)将ssh-key中的公钥写入到目标机器的授权密钥文件里

在源机器创建ssh-key密钥对

第(一)件事很简单:要在源机器(即主机A,ip:192.168.0.1)生成ssh-key密钥对,可以通过ssh-keygen指令 (windows机器可以使用git客户端的git-bash.exe)。

bash 复制代码
# 执行 ssh-keygen --help 可以看到生成ssh-key的可选加密算法类型encryprType有:[-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa],其中rsa是默认的加密算法。
# 推荐使用ed25519加密算法,比默认的rsa算法更快更安全,生成的密钥内容也更短。
ssh-keygen -t ed25519

# 执行上面指令后,第一步会提示生成的私钥文件的默认路径(即~/.ssh/id_{encryptionType},默认保存到当前用户的.ssh目录(即~/.ssh/))(如有需要可自行修改路径或文件名),第二第三步是二次确认访问该ssh-key的密码,一般都留空直接回车。

三次回车后,可以在当前用户home目录的**.ssh文件夹** (即**~/.ssh/** )找到该ssh-key密钥对:id_ed25519id_ed25519.pub 。其中带.pub后缀的为公钥不带.pub后缀的为私钥。这两个文件的内容都是文本,可以编辑和查看。

将ssh-key中的公钥写入到目标机器的授权密钥文件里

第(二)件事也很简单:要完成目标机器(即主机B,ip:192.168.0.2)对源机器(即主机A,ip:192.168.0.1)的ssh-key授权,有两种方式:

方式1、在主机A通过ssh-copy-id指令将本机的公钥文本内容写入到主机B的授权密钥文件里

如果主机B的ssh端口是默认的22端口,也可以省去- p 22。如果是要登录主机B的非root用户,则修改为目标用户的用户名。这种方式需要输入目标用户的登录密码。

bash 复制代码
ssh-copy-id [-p 22] root@192.168.0.2

#输入主机B用户的登录密码后,执行成功则可以在主机B的目标用户home目录的.ssh文件夹(即~/.ssh/)的authorized_keys文件 (即授权密钥文件)看到成功追加了主机A的ssh-key公钥(即id_ed25519.pub)的文本内容。

方式2、可以跳过ssh-copy-id指令,直接登录主机B的目标用户,编辑目标用户的授权密钥文件 (即**~/.ssh/authorized_keys** ,++没有该文件则需用touch指令先创建该文件++),把主机A的ssh-key公钥(即id_ed25519.pub)的文本内容追加进来。

ssh-key免密登录目标机器

上述两个前提完成了,就可以在源机器(即主机A,ip:192.168.0.1)执行ssh指令通过ssh-key免密登录到目标机器(即主机B,ip:192.168.0.2)。

bash 复制代码
ssh [-p 22] root@192.168.0.2

如果想在源机器上使用ssh工具(比如XShell、WindTerm、MonaXterm等)通过ssh-key免密登录到目标机器呢?

打开ssh工具,填写目标机器(即主机B,ip:192.168.0.2)的ip、端口、用户名,然后输入登录密码的界面通常都会有另一个选项或选项卡,一般叫做"public key"或"ssh key"之类的。点击该选项或选项卡会要求选择密钥文件或身份文件,选择ssh-key私钥 (即id_ed25519文件)然后就可以免密登录了。


ssh-key免密连接git站

现在常用的git代码仓库网站(简称git站)有:gitee、coding、github、gitlab、bitbucket等。

在git站注册了账号后,可以进入账号设置里面添加ssh-key,从而实现你本地机器免密clone、pull、push你在该git网站的仓库(即项目代码)。这个功能利用的就是ssh-key免密连接原理。

git站的这个功能和使用ssh-key免密登录服务器就仅仅是第(二)步的操作方式不同而已:

都是采用的方式2,只不过源机器的ssh-key公钥(即id_ed25519.pub)文本内容不是直接写入到目标机器的目标用户的授权密钥文件里,而是粘贴到git站的账号设置里的ssh-key配置项

相关推荐
杨半仙儿还未成仙儿1 小时前
linux ls -l 输出 drwxr-xr-x 2 root root 4096 Dec 5 21:48 rootTest 是什么意思
linux·运维·xr
内核程序员kevin1 小时前
使用trace-cmd跟踪Linux内核函数:一次愉快的内核探险
linux·运维·linux内核·ftrace
moxiaoran57532 小时前
使用Feign远程调用丢失请求头问题
运维·服务器
come-昂-2 小时前
Zephyr2.7.0与3.7.0测试用例版本差异
linux·运维·服务器·测试用例
快刀一哥2 小时前
ubuntu扩展虚拟你
linux·运维·ubuntu
云计算-Security2 小时前
Jenkins 推送报错 - SSH 密钥失效
ssh·jenkins
confident32 小时前
centos 常见问题处理
linux·运维·centos
海岛日记3 小时前
Docker、DBGPT一键安装、卸载
运维·docker·容器
kaoa0003 小时前
Linux入门攻坚——40、Linux集群系统入门-lvs(1)
linux·运维·服务器
佛系菜狗3 小时前
【菜狗前端work-git】反合master代码的坑及如何解决避免+提交代码注意事项+git常用命令总结
git·gitlab