在k8s的pod中,调用ssh内网穿透
首先 生成一份 ~.ssh/id_rsa与~/.ssh/id_rsa.pub文件将两份文件的内容,使用base64编码,生成两个secret的配置如 ssh_secrect.yaml:更新或新增刚刚创建的secretkubectl create -fssh_secrect.yaml查看你的secret目录挂载的位置,以我的为例,我挂载在 /config 目录下编写shell脚本建议把shell文件
·
首先 生成一份 ~.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,友情在线帮助~
更多推荐
已为社区贡献1条内容
所有评论(0)