SSH基础知识以及配置免密登录(gitlab-runner为例)

ssh 基础知识

参考 https://www.jianshu.com/p/33461b619d53

gitlab-runner配置实战

ssh要配置当前操作用户的
比如当前是gitlab-runner在执行,ssh hello@abc
虽然是hello用户要登录到abc服务器,但是免密依然要配置的是gitlab-runner的id_rsa.pub

举个更详细的例子

SSH基础知识以及配置免密登录(gitlab-runner为例)_第1张图片

现在是gitlab-runner在执行ssh [email protected],没有权限。

假设gitlab-runner在xx.xx.xx.123的机器上

操作如下

登录xx.xx.xx.123,进入/home/gitlab-runner/.ssh目录(因为这里是gitlab-runner用户要执行ssh,所以要进入gitlab-runner的主目录)

查看id_rsa.pub

在这里插入图片描述

然后登录xx.xx.xx.216,进入root用户的主目录/root/.ssh

复制xx.xx.xx.123服务器上的/home/gitlab-runner/.ssh/id_rsa.pub的内容
追加到xx.xx.xx.216的/root/.ssh/authorized_keys里面

注意事项

网上有一些示例都会说重新生成就是执行下面的命令

1.在主机A生产密钥对: ssh-keygen -t rsa, 会在.ssh目录下产生密钥文件
2.拷贝主机A的公钥到主机B: scp id_rsa.pub
3.将主机A的公钥加到主机B的授权列表.ssh/authorized_keys(若不存在,手动创建): cat id_rsa.pub >> authorized_keys

流程是没问题的,但是有两个很危险的操作

首先第一步,如果主机A上已经配置过ssh了,就不要在执行ssh-keygen -t rsa命令了,这个会重新生成ssh下面的文件,使得之前A配置在其他服务器上的免密失效,这里我们需要的是A主机上的当前用户的id_rsa.pub,如果有我们直接用

其次第二步,拷贝主机A的公钥到主机B: scp id_rsa.pub,这个问题会覆盖B主机原来的id_rsa.pub,所以这里尽量不要复制到B主机原来ssh目录下,我建议手动复制A主键的id_rsa.pub的值

第二步不可取,那么第三步的操作应该是修改B主机目录下的.ssh/authorized_keys,直接vim authorized_keys 然后编辑,在最后面添加

authorized_keys像下面的样子(添加了两台主机免密登录)

SSH基础知识以及配置免密登录(gitlab-runner为例)_第2张图片

注意

scp: /data/*: Permission denied
ERROR: Job failed: exit status 1

这个问题是由于scp到的那个服务器上要被替换的文件之前是另外一个账户创建的,通过scp账户没有权限覆盖,只需要登录到要scp的服务器,删除相应的文件即可

还有一种报错

Host key verification failed.

在这里插入图片描述

这个问题是第一次ssh登录的时候需要把server的主机加入client的known_hosts里,这个过程需要手动输入yes来操作,而在runner执行过程中无法进行交互式操作,所以报错,这个只需要手动在主机上ssh登录一下就可了。

SSH基础知识以及配置免密登录(gitlab-runner为例)_第3张图片

你可能感兴趣的:(持续集成)