jenkins构建项目时使用sshpass + scp远程拷贝踩坑。

1,278 阅读1分钟
我这边的流程是这样的:	(服务器 centos 7.61. jenkins从gitlab上将代码拉到本地,
	2. 在本地打包之后发送到其他服务器上。

使用jenkins将代码包拷贝到其他服务器上可以使用jenkins提供的插件(自行百度)。
我这里使用了scp将本地的软件包拷贝到其他服务器上。

记录一下踩的坑。

yum -y install sshpass 

使用sshpass,不输入密码。

# jenkins中脚本中关于scp的shell如下:
sshpass -p 'abc@123!!' scp -r $sda1_client_hard_jar sda1@172.16.100.111:$remote_deploy_dir/;

# 构建报错信息如下:
sda1@172.16.100.111:/home/sda1/app/
Host key verification failed.
Build step 'Execute shell' marked build as failure

排障历程:

	新建用户:
	useradd bboo
	
	切换用户:
	su bboo

	执行sshpass + scp的命令:
	sshpass -p 'abc@123!!' scp -r /home/bboo/abc sda1@172.16.100.111:/home/sda1/
	
	# 错误信息如下:
	Host key verification failed.

	# 尝试是否可以远程登陆:
	ssh sda1@172.16.100.111		# 可以登陆
	
	再次,执行sshpass + scp的命令成功。
	
	需要先建立一次ssh链接,然后才可以使用sshpass。


以下是解决jinkins无法使用sshpass + scp的办法:

	jenkins执行脚本使用的是jenkins这个用户。

	切换到jenkin用户发现无法切换。
	su jenkins

	查看jenkins用户,发现没有bash的执行权限。
	cat /etc/passwd
	jenkins:x:998:994:Jenkins Automation Server:/var/lib/jenkins:/bin/false

	赋予bash的执行权限。
	vim /etc/passwd
	jenkins:x:998:994:Jenkins Automation Server:/var/lib/jenkins:/bin/bash
	
	切换到jenkins用户。
	su jenkins
	
	链接远程服务器的sda1用户
	ssh sda1@172.16.100.111

	赋予bash的sshpass执行权限。
	vim /etc/passwd
	jenkins:x:998:994:Jenkins Automation Server:/var/lib/jenkins:/bin/sshpass

	再次在jenkins页面构建服务,成功。