最近用docker新搭建了一个jenkins,安装插件的时候发现publish over ssh找不到了,官方给出的解释是存在安全隐患于2022.01.12暂停分发,官方解释如下:https://www.jenkins.io/security/advisory/2022-01-12

之前文章介绍过通过publish over ssh插件推送jenkins编译好的项目到对应服务器,现在该插件无法使用了,只能寻找替代插件。

在程序猿bug解决圣地找到一篇咨询该问题的解决方案:https://stackoverflow.com/questions/70828203/which-plugins-could-replace-publish-over-ssh-from-jenkins,使用ssh插件(未安装之前在可选插件里叫ssh,安装之后在已安装里叫ssh plugin),不过该插件上一次版本更新也已经是3年前10个月了(截止2022.02.12)。

查找资料学习ssh插件的用法。。。。。。

搜索关键字jenkins ssh,你查到的99.999%资料都是关于publish over ssh的,垃圾。。。

于是搜索This plugin executes shell commands remotely using SSH protocol,找到一篇完整介绍通过ssh方式配置的文章:https://blog.51cto.com/wujianwei/2492430

一、安装ssh插件,如上图。

二、配置远程ssh连接服务器的账号密码凭据。(这里我们以root账号讲解,关于非root账号(或者说非最大权限的账号)我们后面单独介绍。)
  Manage Jenkins(系统管理) —>Manage Credentials --> Stores scoped to Jenkins 下的权限域 --> 全局凭据 --> 点击左侧添加凭据按钮 --> 选择类型(Username with password 或者 SSH Username with private key)--> 填写账号密码(或private key)后确认添加。

 三、配置SSH服务器参数。

  Manage Jenkins(系统管理) —>System Configuration(系统配置) --> SSH remote hosts --> 点击SSH sites下的新增按钮 --> 填写以下信息 --> 填写完后点击底部的保存(或应用)。

hostname:要ssh连接的服务器ip;

port:服务器端口;

Credentials:选择连接的账号;

下面的可以暂时不填,表示用默认值。

点击按钮Check connection,验证配置的以上参数是否正确。

 四、构建应用。

  关于创建新任务本文就不介绍了,前面文章有介绍过,网上文章也不少。本次我们只说新增加的ssh方式。

  在构建选项下增加构建步骤:Execute shell script on remote host using ssh

  

  填写ssh连接的远程服务器,和连接后的shell执行语句。我这里是连接到宿主机,然后把宿主机挂载的tomcat容器项目清理再重新从jenkins容器挂载的编译文件夹中复制新的。

  

保存后执行即可成功~~


以上配置是假设你知道服务器root账号(或其他类似root权限账号)的基础上,,很多时候IT给我们的机器是通过堡垒机(即服务器管理系统)登录的,虽然登录的是root账号但是不给到root账号密码,这个时候可能需要我们自己创建账号,然后配置对应的参数到jenkins系统管理的ssh中。

关于在centos中创建账号,可以参考这篇文章:https://www.cnblogs.com/geoffreygao/p/12238231.html

一、添加新账号:

useradd 你的新账号;
#例如添加账户王小明:useradd wangxiaoming

二、添加密码:

passwd 你上面创建的新账号;
# 例如:passwd wangxiaoming

  此时会让你输入密码,输入密码时不显示任何字符,不要以为卡住了,不要按删除键del,密码输好后按确认键enter,如果密码太简单安全性较低会提示你,不用管,继续就好,会让你再输入一遍密码确认。

三、设置权限:

  此时的新账号只有查看权限, 如果你想复制(cp)文件、移动文件(mv)、删除文件(rm)都是没有权限的。

   

#切换账号,有的文章介绍中su后面加-,发现在centos中会有不正确提示,不需要加就能切换。
su wangxiaoming #执行复制文件。非root账号前需要加sudo关键字。
sudo cp favicon.ico favicon.ico3

#提示输入密码验证后才能操作,此时输入密码提示没有再sudoers文件中存在权限。

  根据前面参考文章要在/etc/sudoers中添加权限,而本身该文件是没有写入权限的,需要先修改该文件为可写入权限。而修改sudoers文件需要root账号操作。

# 注意要切换回root账号,因为我在堡垒机上没有root账号密码,所以是重新开启新shell窗口以root账号操作。
# 为sudoers添加可写权限
chomd -v u+w /etc/sudoers
# 编辑sudoers文件
vi /etc/sudoers 按Insert键进入编辑模式 # 在 sudoers 文件添加新用户信息到 ## Allow root to run any commands anywhere 下,修改后的效果为:
## Allow root to run any commands anywher
root ALL=(ALL) ALL
wangxiaoming ALL=(ALL) ALL

按Esc 后 输入 :wq 保存并退出

  此时再执行sudo cp favicon.ico favicon.ico3,输入密码后复制文件成功。

四、去掉密码验证。

  上面我们发现执行sudo cp语句后需要输入密码验证,但我们本意是要在jenkins中执行的,而jenkins中自动执行的过程中是无法输入密码的,所以会导致构建失败(大家可以去试下)。

  那么我们是否可以设为不用输入密码就执行呢,答案是可以的。方法还是修改上面的sudoers文件,只不过最后的ALL变为NOPASSWD: ALL即可。

# 注意要切换回root账号,因为我在堡垒机上没有root账号密码,所以是重新开启新shell窗口以root账号操作。

# 编辑sudoers文件
vi /etc/sudoers 按Insert键进入编辑模式 # 在 sudoers 文件添加新用户信息到 ## Allow root to run any commands anywhere 下,修改后的效果为:
## Allow root to run any commands anywher
root ALL=(ALL) ALL
wangxiaoming ALL=(ALL) NOPASSWD: ALL 按Esc 后 输入 :wq 保存并退出

  再执行sudo cp语句发现不需要输入密码验证了。

五、修改sudoers文件回不可写入模式。

  前面我们将sudoers文件设为了可写入模式,此时记得重新将其权限设为不可写入哦,当然要用root账号操作~~

# 注意要切换回root账号,因为我在堡垒机上没有root账号密码,所以是重新开启新shell窗口以root账号操作。

#取消 sudoers 文件可写权限
chmod -v u-w /etc/sudoers

这样在jenkins中用非root账号执行shell便不需要再输入账号密码了。


最后,虽然本次方式暂时解决了没有publish over ssh的问题,但目前该方式仅适合两种情况:

1、ssh连接到远程服务器后在远程服务器执行构建操作,或在远程服务器直接获取已构建好的项目。

2、使用docker容器模式,而且jenkins容器和对应的服务器容器(比如tomcat)在同一个宿主机上,这样可以通过ssh连接到宿主机进行文件夹之间的增删移动复制操作。

我这次情况是2。

其他的情况可能不适用本文方式。

今天大佬给了一个新思路,说将两个服务器添加互信,然后不用插件方式,有私钥公钥后直接shell执行ssh登录。下一次我将用这种方式学习并记录一下。

jenkins插件Publish Over SSH因安全问题下架的更多相关文章

  1. Jenkins通过Publish over SSH插件实现远程部署

    Jenkins通过Publish over SSH插件实现远程部署 步凑一.配置ssh免秘钥登录 部署详情地址:http://www.cnblogs.com/Dev0ps/p/8259099.html ...

  2. jenkins配置publish over ssh遇到的问题

    一.背景 目标 本篇文章主要是说明自己在配置jenkins的publish over ssh插件所遇到的问题.本次主要是windows下的jenkins通过ssh的方式访问我本地虚拟机的ubuntu系 ...

  3. Jenkins配置Publish Over SSH讲解说明

    原创 Jenkins配置Publish Over SSH讲解说明 2018-08-22 11:59:30 M.Blog 阅读数 3764更多 分类专栏: Jenkins   版权声明:本文为博主原创文 ...

  4. Jenkins系列-Jenkins通过Publish over SSH插件实现远程部署

    配置ssh免秘钥登录 安装Publish over SSH插件 插件使用官网:https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plug ...

  5. Jenkins中Publish Over SSH插件使用

    Publish Over SSH插件安装 进入插件管理安装插件,我这里已经安装过了所以在installed里面,没安装过去available里面搜索. 系统设置中配置Publish Over SSH ...

  6. 使用 svn+maven+jenkins(hudson)+Publish Over SSH plugins 构建持续集成及自动远程发布体系(转)

    1.安装jenkins 2.浏览器访问jenkins主页 http://192.168.0.1:8080/,点击“系统管理” 3.在插件管理中,安装Publish Over SSH插件 4.在系统设置 ...

  7. jenkins使用Publish Over SSH中遇到的问题

    在jenkins中想使用publish over ssh来在构建后发送XML或PNG文件至服务器,以便做其它的操作,安装完publish over ssh后,填加构建,发现在构建失败时,不传送文件,老 ...

  8. Jenkins高级应用——Publish Over SSH插件

    在之前的篇幅中有介绍,利用jenkins结合shell脚本完成远程部署的功能,点击Jenkins结合shell+expect脚本完成线上环境自动构建部署即可查看. 上述方式需要引入expect脚本,安 ...

  9. 使用Publish Over SSH插件实现远程自动部署

    背景: 现场的部署环境开放外网环境困难,只有一台机器能够开发外网,应对该情况,所有的补丁文件需要直接在master机器上面生成,然后命令移动到其他的服务器上面去. 这里使用到了jenkins的Publ ...

随机推荐

  1. 解决zabbix server is running | No 的方法

    Zabbix 的简介 Zabbix 可以监控网络和服务的运行状况,Zabbix 利用灵活的告警机制,允许用户对事件发送基于 Email 的告警.但最近在使用的时候遇到一个问题. 这篇文章主要给大家介绍 ...

  2. 【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)

    问题描述 如何在一个AppService下同时部署运行多个Java 应用程序呢? 问题解答 因为App Service的默认根目录为 wwwroot.如果需要运行多个Java 应用程序,需要在 www ...

  3. less与sass的区别

    在介绍less和sass的区别之前,我们先来了解一下他们的定义: 一.Less.Sass/Scss是什么? 1.Less: 是一种动态样式语言. 对CSS赋予了动态语言的特性,如变量.继承.运算.函数 ...

  4. 学习笔记--Java中的变量

    Java中的变量 /** * 关于 Java 语言当中的变量: * * 1. 什么是变量? * - 变量的本质上来说是内存空间,这块空间有(数据类型.名字.字面值) * - 变量包括三部分:数据类型. ...

  5. 安装JavaJDK没有jre环境的解决办法 错误: C:\Program Files\Java\jdk-11.0.7\jre

    安装JDK11 发先没有jre解决办法 在安装目录下执行 bin\jlink.exe --module-path jmods --add-modules java.desktop --output j ...

  6. py3nvml实现GPU相关信息读取

    技术背景 随着模型运算量的增长和硬件技术的发展,使用GPU来完成各种任务的计算已经渐渐成为算法实现的主流手段.而对于运行期间的一些GPU的占用,比如每一步的显存使用率等诸如此类的信息,就需要一些比较细 ...

  7. day 13 函数指针类型

    (1).有以下程序: 则正确的选项是[B] (A).7 4 (B).4 10 (C).8 8 (D)10 10 分析:主要考求字符串的长度,strlen是专门求字符串长度的函数,但不包含'\0'在内. ...

  8. RHCSA 第四天

    1.使用whereis 查找 locate命令 使用which查找whereis命令 使用locate查找rm命令    2.find命令使用: 使用find命令在当前路径下查找所有的普通文件 使用f ...

  9. ROS之arduino交互

    一.第一种安装方式(不支持自定义消息) 第一步打开官网 http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup 第二 ...

  10. covid19数据挖掘与可视化实验

    数据说明: 来源: https://www.kesci.com/mw/project/5e68db4acdf64e002c97b413/dataset (ncov) 日期:从2020年1月21日开始 ...