运维-jenkins发版执行远程脚本连不上ssh

1、背景

本次案例是出现在公司的预发布环境发版中。java编译打包->docker镜像构建->镜像推送harbor->业务机器拉取镜像,这几个步骤已经完成了,执行到最后一步(ssh连接业务机器采用docker-compose起容器)的时候报错如下:
ssh_exchange_identification: Connection closed by remote host

2、分析 & 解决

2.1 服务器环境

Centos 7.6

2.2 现象

通过以上异常提示可以看出是jenkins shell中连接远程机器的时候,被ssh的服务端给终端连接了。要么ssh挂了,要么连接数过多。于是采用第一方案 systemctl restart sshd.service 重启ssh未果。那么只能考虑从日志寻找蛛丝马迹了。

补充知识(主机防护的常用目录和文件):

  • ssh日志文件: /var/log/secure
  • ssh配置文件:/etc/ssh/sshd_config
  • Linux白名单:/etc/hosts.allow
  • Linux黑名单:/etc/hosts.deny
  • 华为云主机防护(专有的使用方便):/etc/sshd.deny.hostguard

ssh的日志:


Jan 26 14:58:04 ecs-cicd sshd[2692]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:04 ecs-cicd sshd[2693]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:04 ecs-cicd sshd[2694]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:04 ecs-cicd sshd[2695]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:04 ecs-cicd sshd[2696]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:05 ecs-cicd sshd[2697]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:05 ecs-cicd sshd[2698]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:05 ecs-cicd sshd[2699]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:05 ecs-cicd sshd[2700]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:05 ecs-cicd sshd[2701]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:05 ecs-cicd sshd[2702]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:05 ecs-cicd sshd[2703]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:06 ecs-cicd sshd[2704]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:06 ecs-cicd sshd[2705]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:06 ecs-cicd sshd[2706]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:07 ecs-cicd sshd[2707]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:07 ecs-cicd sshd[2711]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:07 ecs-cicd sshd[2712]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:07 ecs-cicd sshd[2713]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:08 ecs-cicd sshd[2714]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:08 ecs-cicd sshd[2718]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:09 ecs-cicd sshd[2719]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:09 ecs-cicd sshd[2720]: refused connect from 159.223.106.203 (159.223.106.203)
Jan 26 14:58:09 ecs-cicd sshd[2721]: refused connect from 159.223.106.203 (159.223.106.203)

ip地址归属:

IP 地址:	 159.223.106.203
IP Long:	 2682219211
归属地(纯真数据):	美国
归属地(ipip):	美国 美国 -
归属地(IP2REGION):	美国 德克萨斯

可见有大量的来自漂亮国的恶意攻击,果断将其加入ip黑名单:
/etc/hosts.deny 文件追加一行 sshd:159.223.106.203

3、总结

互联网的世界,每天都会有来自各地的黑客对服务器暴力破解,那么我们可以做些什么加强安全呢?

  1. 更改ssh服务端口并且使用高强度密码。
  2. 通过shell或者python自动化识别恶意连接ssh的ip,并进行封禁。
  3. 使用共有云上的服务器自带的主机防护服务。
  4. 关注最新的框架代码漏洞,并及时修复处理。(比如最近轰动码农界的Apache Log4j2 远程代码执行漏洞)
### 回答1: 在 Jenkins 中使用 "Publish over SSH" 插件来部署 Java 应用可以使用下列脚本: ``` #! /bin/bash # 从 Jenkins 构建参数中获取相关信息 JENKINS_BUILD_ID=$1 JENKINS_BUILD_NUMBER=$2 JENKINS_JOB_NAME=$3 JENKINS_BUILD_TAG=$4 # 连接到目标服务器并执行相应命令 ssh user@example.com << EOF # 在远程服务器上创建文件夹 mkdir -p /opt/jenkins/$JENKINS_JOB_NAME/$JENKINS_BUILD_NUMBER # 从 Jenkins 服务器上下载文件 scp jenkins@jenkins.example.com:/opt/jenkins/$JENKINS_JOB_NAME/workspace/$JENKINS_JOB_NAME/*.jar /opt/jenkins/$JENKINS_JOB_NAME/$JENKINS_BUILD_NUMBER # 停止应用 systemctl stop myapp.service # 备份当前应用 mv /opt/myapp /opt/myapp.bak # 将新应用文件移动到目标位置 mv /opt/jenkins/$JENKINS_JOB_NAME/$JENKINS_BUILD_NUMBER /opt/myapp # 启动应用 systemctl start myapp.service EOF ``` 在上面的脚本中,我们使用 Jenkins 的构建参数来获取构建信息,然后连接到目标服务器并使用 scp 命令从 Jenkins 服务器上下载文件。接下来,我们停止旧版应用,将新版应用移动到目标位置,并启动新版应用。 ### 回答2: Jenkins是一个开源的持续集成工具,用于自动化构建、测试和部署软件项目。Publish over SSHJenkins的一个插件,用于将构建的项目文件通过SSH协议发布远程服务器上。 在Jenkins中使用Publish over SSH插件执行Java启动脚本时,首先需要在Jenkins管理界面中安装和配置该插件。配置步骤大致如下: 1. 在Jenkins管理界面选择“系统设置”。 2. 在页面下方找到“Publish over SSH”插件的配置区域。 3. 点击“Add”按钮添加一个SSH服务器配置。 4. 在配置页面中填写远程服务器的连接信息,包括主机名、SSH端口号、用户名和密码等。还可以选择“Advanced”选项以配置其他高级设置,如使用私钥登录等。 5. 点击“Test Configuration”按钮进行连接测试,确保连接配置正确无误。 6. 保存配置并返回到Jenkins主页。 接下来,我们可以在Jenkins的构建项目中使用Publish over SSH插件启动Java脚本。具体步骤如下: 1. 打开需要使用SSH插件的Jenkins构建项目。 2. 在“构建环境”中勾选“Send files or execute commands over SSH after the build runs”选项。 3. 在“SSH Server”一栏选择之前配置好的SSH服务器配置。 4. 在“Transfers”一栏中可以设置要传输的文件和目标目录。 5. 在“Exec Command”一栏中填写要执行的Java启动脚本命令。 6. 保存并触发构建。 当Jenkins执行该项目时,它将会使用SSH协议将构建产物和Java启动脚本传输到远程服务器上,并且在远程服务器上通过SSH执行脚本。 通过使用Jenkins的Publish over SSH插件和Java启动脚本,我们可以方便地实现自动化部署执行远程命令,从而简化软件项目的部署和管理过程。同时,该插件还支持其他高级功能和设置,如跳过主机密钥验证、使用跳板机访问远程服务器等,以满足不同场景下的需求。 ### 回答3: 用Jenkins的Publish Over SSH插件,可以通过SSH连接远程服务器,并执行一个Java启动脚本。 首先,确保在Jenkins服务器上安装了Publish Over SSH插件,并在插件管理中启用它。 然后,打开Jenkins的配置页面,在"系统设置"部分找到"Publish over SSH"配置项。点击"Add"按钮,配置SSH服务器的连接信息,包括远程服务器的IP地址、SSH端口号、用户名和密码。 接下来,在Jenkins任务中,配置构建步骤。选择"Execute shell script on remote host using ssh"选项,并输入要执行的Java启动脚本的命令,例如: ``` java -jar /path/to/your/java/jar/file.jar ``` 保存并触发构建,Jenkins将通过SSH连接远程服务器,并执行Java启动脚本。通过Publish Over SSH插件,你可以轻松地将构建输出发布远程服务器。 这种方法非常适用于需要在远程服务器上执行Java应用程序的场景,例如部署到生产环境或测试环境中。同时,Jenkins发布部署过程也能够自动化,并进行可靠的版本管理和回滚操作,极大地提高了开发和运维的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值