首先 生成一份 ~.ssh/id_rsa与~/.ssh/id_rsa.pub文件

将两份文件的内容,使用base64编码,生成两个secret的配置

如 ssh_secrect.yaml:

 更新或新增刚刚创建的secret

kubectl create -f ssh_secrect.yaml

查看你的secret目录挂载的位置,以我的为例,我挂载在 /config 目录下

 编写shell脚本

建议把shell文件写在项目中,不要打包进docker镜像内,不安全

我的shell文件是写在项目内的,在根目录的 /shell/ssh-mysql.sh 文件内容如下

要注意你要映射的本地端口后,代码中不要写错了,否则会连接失败

#!/bin/bash
str=$"\n"
# 注意 13306是你本机要连接的地址
nohup /usr/bin/ssh -N -p 22 ops@11.22.33.44 -L 127.0.0.1:13306:55.66.77.88:3306 &
# 8.210.79.54 内网穿透地址  127.0.0.1:13306 本机地址与连接的端口号 10.128.3.177:3306 数据库id与地址
sstr=$(echo -e $str)
echo $sstr
tail -20 /var/log/messages
# 要确定/var/log/messages日志是否存在,如果不存在,可以修改为其他必有的文件

接下来,修改你的docker镜像

找到你的docker中的可执行文件,新增如下内容

idRsaSecretFile="/config/id_rsa"  # 注意,这个是我的挂载的目录,你要确定是否与你的目录一致,不一致的话需要修改为你自己的地址
idRsaProfFile="/root/.ssh/id_rsa"  # id_rsa要存放的目录,这个是通用的
if [ -f "$idRsaSecretFile" ];then
  if [ ! -f "$idRsaProfFile" ];then
    cat $idRsaSecretFile > $idRsaProfFile
    chmod 0600 $idRsaProfFile  # 修改文件权限,如果不修改,无法执行ssh命令
  fi
fi

idRsaPubSecretFile="/config/id_rsa.pub"  # 注意,这个是我的挂载的目录,你要确定是否与你的目录一致,不一致的话需要修改为你自己的地址
idRsaPubProfFile="/root/.ssh/id_rsa.pub"  # id_rsa.pub要存放的目录,这个是通用的
if [ -f "$idRsaPubSecretFile" ];then
  if [ ! -f "$idRsaPubProfFile" ];then
    cat $idRsaPubSecretFile > $idRsaPubProfFile
    chmod 0600 $idRsaPubProfFile
    echo "StrictHostKeyChecking no" >~/.ssh/config  # 不检查ssh的用户设置,否则需要手动输入yes才能跳过,必须配置
  fi
fi


# ssh脚本的位置
sshRunFile="/work/site/shell/env_test_asset_ssh.sh"
# 根据当前环境变量,判断是否允许执行ssh脚本,我配置的是dev环境才执行
if [[ "$ENV" == "dev" ]]; then
  # 判断ssh文件是否存在,如果存在,才允许执行
  if [ -f "$sshRunFile" ];then
    chmod a+x $sshRunFile  # 给ssh脚本增加可执行权限
    /bin/bash $sshRunFile  # 执行ssh脚本
  fi
fi

打包镜像,发布,更新你的pod,进入pod查询是否执行成功

ps aux|grep 'ssh'

 

打工搞成 

如若不成功,可以加我微信,coderyu,友情在线帮助~

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐