免密操控(或者使用sshpass工具,看下面)
CI/CD实质是将我们手动集成、拷贝部署的方式脚本化,远程部署的重要姿势是要求免密操控。
要让Gitlab Runner部署到远程机器,远程机器必须信任gitlab runner账户。
ps: 免密操控不可以逆向, 就是说可以一个主控方, 多个被控方, 但不可以一个被控方,多个主控方
1 | 经测试,是可以多个主控方,一个被控方的 |

- 先执行
su gitlab-runner切换到gitlab-runner账户 - 在你的CI机器(主控端)上使用 ssh-keygen命令创建公钥,使用
ssh-keygen -t rsa来创建,程序会问你存放目录,如果不需要修改,直接回车几次即可 - 将
/.ssh目录下/.sshid_rsa.pub文件拷贝到受控机器的`目录中,然后将文件内容导入到~/.ssh/authorized_keys`文件
1 | 主控方: |
在受控方机器设置权限:
~/.ssh权限设置为700;~/.ssh/authorized_keys权限设置为600之后在主控CI机器 就具备免密登陆 远程机器的能力。
Linux登录ssh携带密码
1.安装 sshpass
1 | apt-get/yum install sshpass -y |
2.携带密码登录
1 | sshpass -p '12345678' ssh -p 22 -tt <用户>@<i> |
(解决gitlab-runner用户无法使用docker命令)将当前用户添加至docker用户组
1 | 1. sudo gpasswd -a gitlab-runner docker #添加gitlab-runner到docker组 |
配置docker登陆时命令非明文
环境变量的登录方式(通过/etc/profile设置PASSWORD变量),以下示例从变量读取密码,然后使用STDIN将其传递给docker login命令:
1 | echo "$PASSWORD" | docker login --username <xxx> --password-stdin ${REGISTRY_ADDRESS} |
问题
1 | 当远程通过ssh登录主机时出现Pseudo-terminal will not be allocated because stdin is not a terminal. 错误 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!