千家信息网

jenkins,自动部署scp传输错误的坑

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,环境:centos7版本:jenkins-2.176.3-1.1.noarch.rpm问题:使用root帐号安装jenkins之后,配置自动部署,打包完成项目不能scp到项目服务器,(测试服务器ssh
千家信息网最后更新 2025年02月02日jenkins,自动部署scp传输错误的坑

环境:centos7

版本:jenkins-2.176.3-1.1.noarch.rpm

问题:使用root帐号安装jenkins之后,配置自动部署,打包完成项目不能scp到项目服务器,(测试服务器ssh端口默认22改为6688之后)提示
Host key verification failed. lost connection
[JENKINS] Archiving /opt/jenkins/workspace/test-microservice/base-zuul/target/base-zuul-0.0.1-SNAPSHOT.jar to com.zjgf/base-zuul/0.0.1-SNAPSHOT/base-zuul-0.0.1-SNAPSHOT.jar
[test-microservice] $ /bin/bash /tmp/jenkins8821230735005579726.sh
channel stopped
Host key verification failed.
lost connection
upload files fail

解决方法:
1、rpm包安装的jenkins默认添加jenkins用户 默认shell为:
jenkins:x:992:989:Jenkins Automation Server:/var/lib/jenkins:/bin/false

2、修改默认shell
jenkins:x:992:988:Jenkins Automation Server:/var/lib/jenkins:/bin/bash

3、切换到jenkins用户
[root@node60 ~]#su - jenkins
bash-4.2$

4、解决变量问题
可以看到jenkins用户没有变量,原因是在安装jenkins时,jenkins只是创建了jenkins用户,并没有为其创建home目录。所以系统就不会在创建用户的时候,自动拷贝/etc/skel目录下的用户环境变量文件到用户家目录,也就导致这些文件不存在,出现-bash-4.2#的问题了。

5、修改jenkins用户变量
以下命令是在切换到 jenkins用户下执行的(重要事项再说一次,su - jenkins 之后再执行命令)!(只是用户现在显示的是-bash-4.2)这个时候不要慌,执行下面步骤:

vim ~/.bash_profile

执行上面的命令,即使没有.bash_profile文件,linux会自动创建。
然后再添加这句

export PS1='[\u@\h \W]\$'

:wq (保存退出)

然后再刷新.bash_profile文件,使其起作用

source ~/.bash_profile
然后就看到当前的变量生效了

[jenkins@node60 root]$

现在可以看到jenkins用户shell变量正常了。

6、再次测试
再次执行jenkins任务,发现还是报错,在Jenkins的使用过程中,如果在脚本中使用到sudo命令,有可能出现如下所示的错误:
sudo: no tty present and no askpass program specified
这是因为Jenkins服务器在执行sudo命令时的上下文有误,导致这个命令执行的异常。

7、解决方案:
切换到root或者管理员账户

[root@node60 ~]# visudo
在文件中加上一行
Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
jenkins ALL=(ALL) NOPASSWD: ALL

再次执行jenkins任务,发现还有报错,经过排查需要在测试服务器上添加jenkins用户的密钥

cat /var/lib/jenkins/.ssh/id_rsa.pub

系统提示我 - -!
cat: /var/lib/jenkins/.ssh/id_rsa.pub: 没有那个文件或目录
于是
创建jenkins用户的公钥文件id_rsa.pub (su - jenkins 以下命令在jenkins用户shell中执行!!!)

[jenkins@node60 root]$ ssh-keygen -t rsa

一路回车下去,然后再查看生成的jenkins密钥对

[jenkins@node60 root]$ cat /var/lib/jenkins/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaWGfcK3(太长了,默默的删除一部分)WEDv64dQ+oG/IN2lDQa/ jenkins@node60

然后复制jenkins生产的公钥,登录测试服务器,添加到测试服务器部署帐号的~/.ssh/authorized_keys

[jenkins@test1 ~]$ vim ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaW0Mqv0xwKGfcK3WEDv645lPuhXXReY3jGdQ+onGwqym9G/IN2lDQa/ jenkins@node60
保存退出

8、再次测试
再次编辑jenkins任务 JOB*{需要注意,scp和ssh使用的指定端口号参数 -P 和 -p 在jenkins中区分大小写}
以下为我测试时编写的测试脚本
···
!/bin/bash
上传路径
UPLOAD="/opt/MService/file/upload"
scp -P 6688 /opt/jenkins/workspace/test-aaa-master/target/aaa-0.0.1-SNAPSHOT.jar jenkins@test1:$UPLOAD;
执行测试服务器更新脚本
ssh -t -p 6688 jenkins@test1 'sh /home/jenkins/.sh/aaa.sh';
···
至此,问题解决!完事

用户 测试 命令 文件 服务器 服务 变量 再次 目录 问题 任务 脚本 切换 公钥 只是 密钥 时候 是在 环境 系统 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 销售软件开发票开什么类目 网络安全法规定日志 网络安全宣传周考题答案 华岩试验软件数据库已满 2017网络安全法考试题 计算机网络技术考试试题库 潮州条码打印软件开发 dm数据库去除创建表的引号 江苏潮流软件开发设施应用 数据库版本为904需要哪个版本 全市网络安全攻防演练启动 共建网络安全共享网络文明文字 一个服务器有几个网站怎么设置 国家推动网络安全 建设 购买网络安全配置 易恒健康互联网科技 软件开发工作量怎样评估 去银行软件开发好吗 日版服务器怎么选择 软件开发在家找什么工作 计算机网络技术5g通信专业 在数据库中set什么意思 海口立善网络技术有限公司 网络安全正宗龙头标的 网络技术员考试种类 天希网络安全手抄报 2017年网络安全法亮点 青少年网络安全家长意见建议 楼某熙诉杜某峰某网络技术 安卓软件开发读取文件内容
0