Docker: Alpine Linux升级且安装openssh导致构建凉凉排查修正

2022-09-01 09:57:55 浏览数 (2)

前言

最近在搞一个迭代,发现开发环境的持续集成有些地方可以优化,但需要动到前端基础镜像; 而搞完基础镜像准备用起来的时候,问题就冒出来了。本着不能半途而废的态度,搞起~~

问题

这边是用Jenkins做持续集成的,用了pipeline语法,所以一般出错都能比较快速感知到某个阶段凉了~

排查

报错信息就那么点,那就逐句分析~~

1. deploy_devopment.sh

这是在devops上某个阶段会调用这个脚本去做一些事情,源码大体如下

脚本做了这么一些事情,就是用私钥去链接远端服务器。成功后然后判定是否安装了一些工具集,再推过去,失败就直接退出

2. Pseudo-terminal will not be allocated because stdin is not a terminal.

其次映入眼帘的这句话,就是 唯一能快速感知的信息了。。搜索引擎翻了一遍,基本都是说什么不是一个标准终端运行 加-tt来模拟终端。。具体就是这样

代码语言:javascript复制
# 增加-t -t参数来强制伪终端分配,即使标准输入不是终端。
ssh -tt user1@host1 -p 9527

复制代码

但是,毫无意义。。。只能继续排查

3. Host key verification failed.

意思很直白,链接域的密钥校验不通过。不科学啊。。逆向推测一下。。

情况1: 不升级镜像底层(alpine版本)正常运行(镜像也安装了openssh),构建也如期进行。 情况2: 升级镜像底层(安装openssh),构建密钥就过不去了。。。

结合密钥过不去,那问题很大概率应该就是出现在openssh的版本了。。 Alpine Linux Apk查询: pkgs.alpinelinux.org/packages

版本跨了一个大版本,那妥妥的是破坏性更新导致的啊!!! 问了下我们的运维小伙伴,我们开发环境目前用的是那种算法加密的!(收到的答复就是:rsa);

为了二次确认,用ssh -v和现有的密钥去尝试链接远端服务器,输出的日志里面就很清晰的说明了

代码语言:javascript复制
 # ssh -v -p port user@host
OpenSSH_8.8p1, OpenSSL 1.1.1o  3 May 2022
debug1: Reading configuration data /etc/ssh/ssh_config
-------跳过------
debug1: identity file /root/.ssh/id_ecdsa-cert type -1
debug1: identity file /root/.ssh/id_ecdsa_sk type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256@libssh.org
-------重点来了------
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
debug1: Next authentication method: publickey
debug1: Offering public key: /root/.ssh/id_rsa RSA SHA256:In8kvJ1yVExAGJCUrEaJlLme0w2Kbnkjh90GvB3XkvE
debug1: send_pubkey_test: no mutual signature algorithm
复制代码

看上面的log说是没有匹配的签名算法,接下来就是翻changelog了。。 www.openssh.com/txt/release…

解决姿势

配置文件增加域启动配置

我这边直接打到docker内,省去所有from该基础镜像的都需要手动配置一遍;

代码语言:javascript复制
RUN  mkdir ~/.ssh && echo $'Host *n
  StrictHostKeyChecking non
  PubkeyAcceptedKeyTypes  ssh-rsan
  HostKeyAlgorithms= ssh-rsan
  UserKnownHostsFile=/dev/nulln'
  > ~/.ssh/config
复制代码

会话添加参数

代码语言:javascript复制
# openssh版本不是太高的,可以直接用参数指定会话算法
 ssh -oHostKeyAlgorithms=-ssh-rsa user@host
 
 # 比较新的openssh需要启动该算法,默认是不启用的,
 #  PubkeyAcceptedKeyTypes= ssh-rsa
复制代码

总结

有不对之处请指出,会及时修正,谢谢阅读

0 人点赞