最近我用于内部考试服务运维的开源堡垒机jumpserver迎来了一个大版本更新,无法通过自动更新完成,需要进行手动的升级。
这里记录一下升级过程,备忘。
一、数据迁移
首先官方文档里说明是数据迁移,而不是升级。需要先停止jumpserver的服务。官方提供了4种方法,这里我用习惯的setuptools脚本执行,因为小版本的更新也是用它。
cd /opt/setuptools
./jmsctl.sh stop
systemctl disable jms_core
mv /opt/jumpserver /opt/jumpserver_bak
命令如上,分别是停止服务,停用core,把现在的安装目录重命名为备份。
二、备份数据库
# 从 jumpserver/config.yml
获取数据库信息
DB_HOST: 127.0.0.1 # 数据库服务器 IP
DB_PORT: 3306 # 数据库服务器 端口
DB_USER: jumpserver # 连接数据库的用户
DB_PASSWORD: ****** # 连接数据库用户的密码
DB_NAME: jumpserver # JumpServer 使用的数据库
# mysqldump -h<DB_HOST> -P<DB_PORT> -u<DB_USER> -p<DB_PASSWORD> <DB_NAME> > /opt/<DB_NAME>.sql
说明:如果运行mysqldump命令后,报“ 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces”错误,是 jumpserver 用户没有process权限导致的。
解决办法是:先进入mysql,执行 grant process on *.* to jumpserver@'127.0.0.1'; 后,再次执行mysqldump命令备份,虽然有其它告警信息,但数据库可以完成备份。
最后,校验备份数据库字符集:
if grep -q 'COLLATE=utf8_bin' /opt/jumpserver.sql; then
echo "备份数据库字符集正确";
else cp /opt/jumpserver.sql /opt/jumpserver_bak.sql sed -i 's@CHARSET=utf8;@CHARSET=utf8 COLLATE=utf8_bin;@' /opt/jumpserver.sql
fi
三、下载 jumpserver-install
cd /opt
yum -y install wget wget https://github.com/jumpserver/installer/releases/download/v2.6.1/jumpserver-installer-v2.6.1.tar.gz
tar -xf jumpserver-installer-v2.6.1.tar.gz
cd jumpserver-installer-v2.6.1
安装前,修改配置文件,确保新系统和原来的系统加密KEY一致。
vi config-example.txt
从老版本的config.yml中获取原来的KEY和TOKEN的值,填入配置文件
# 修改下面选项, 其他保持默认 ### 注意: SECRET_KEY 与旧版本不一致, 加密的数据将无法解密
# Core 配置 ### 启动后不能再修改,否则密码等等信息无法解密
SECRET_KEY= # 从旧版本的配置文件获取后填入 (*)
BOOTSTRAP_TOKEN= # 从旧版本的配置文件获取后填入 (*)
写入Core镜像地址
export DOCKER_IMAGE_PREFIX=docker.mirrors.ustc.edu.cn
开始安装
./jmsctl.sh install
后面按提示安装,根据你的具体情况选择,如无特殊要求直接回车,采用默认。
在“ 3. 启动Docker Docker 版本发生改变 或 docker配置文件发生变化,是否要重启 (y/n) (默认为y): y 完成 ”,这一步后,开始下载安装升级对应的套件,请耐心等待。
全部完成后,会显示jumpserver的相关说明。
可以用 ./jmsctl.sh start 尝试启动jumpserver看一下是否成功。如果一切正常的话,./jmsctl.sh stop停服务,恢复原来的数据。
恢复数据库
./jmsctl.sh restore_db /opt/jumpserver.sql
恢复原目录数据
mv /opt/jumpserver_bak/data /opt/jumpserver/core/
至此全部完成!
PS:更新完成后,发现无法使用终端,SSH和RDP都没有反映。排查后发现在会话管理的终端管理里,Gua和KoK0都是离线状态。
重启jumpserver后问题依旧,查看官方文档发现是我在安全设置里把终端注册关闭了,导致新的终端无法注册上来。允许注册后,KoKo正常,但Gua还是不行。
再次查看官方文档,发现需要重新注册,执行如下命令后,全部功能恢复。至此真正全部升级完成!!
rm -f /opt/jumpserver/guacamole/data/keys/jumpserver.key
docker restart jms_guacamole
未经允许不得转载:生于七零年代 » jumpserver v2.5.3 升级到 v2.6.1