shell脚本中解决SCP命令需要输入密码的问题

shell脚本中解决SCP命令需要输入密码的问题,第1张

答案:使用密钥文件

这里假设主机A(192.168.1.3)用来获到主机B(192.168.1.4)的文件。

在主机A上执行如下命令来生成配对密钥:

ssh-keygen -t rsa

遇到提示回车默认即可,袜渗稿公钥被存到用户目录下.ssh目录,告孝比如root存放在:

/root/.ssh/id_rsa.pub

将 .ssh 目录中的 id_rsa.pub 文件复制到 主机B 的 ~/.ssh/ 目录中,并改名为 authorized_keys,

到主机A中执行命令和主机B建立信任,

例(假设主机B的IP为:192.168.100.4):scp ~/.ssh/id_rsa.pub 192.168.100.4:/root/.ssh/authorized_keys

下面就可以用scp、ssh命令不需要密码来获取主机B的文件了

ssh 192.168.100.4 回车就不需要密码了。

注:其实id_rsa.pub内容添加到对方机器的authorized_keys中就行了

拷贝其他服务器附件归集到主服务器bash shell

[ test@abc01.cn ~]$ cat copy.bash

scp -r test1@app02.abc.cn :/home/test1/tomcat/webapps/app01/WEB-INF/attachment/* /home/test/tomcat/webapps/app01/WEB-INF/attachment/

echo "done! app02. copy finish"

scp -r test2@app03.abc.cn :/home/test2/tomcat/webapps/app01/WEB-INF/attachment/* /home/test/tomcat/webapps/app01/WEB-INF/attachment/

echo "done! app03. copy finish"

增加定时任务喊雹

crontab -e

类似编辑vi 在里面粘贴

---shift+zz保存,重启crond服务

root]# service crond restart

引用自 https://www.cnblogs.com/java2sap/p/11424587.html

Linux cp命令主要用于复制文件或目录

1.语雀腔明法

2.参数说明

3.案例

3.1. cp 命令基本用法

3.2 复制目录

3.3 复制软链接文件

3.4. 保留源文件属性复制

3.5. "-l" 和 "-s" 选项圆行

4.cat

6.linux快速删除大量顷告文件

问题:宽猛Jenkins默认使用jenkins用户去启动,jenkins用户并没有权限去执行ssh免密登陆,所以导致执行失败

注:配置linux双机互信后,jenkins也需要将公钥加入到目标机器,才能达到shell脚本中scp免密传输的条枯激件

一、验证登录

1、切换jenkins用户

# su jenkins

切换后还是root账号

2、分析解决:

2.1 应该是/etc/passwd文件中的/bin/bash被yum安装的时候变成了/bin/false

# vim /etc/passwd

jenkins:x:990:988:Jenkins Automation Server:/var/lib/jenkins:/bin/false( bash)

将bin/false改为/bin/bash

再次执行切换

# su jenkins

bash-4.1$

2.2  结果命令提示符的用户名不是jenkins而变成了 bash-4.1$,原因是在安装jenkins时,jenkins只是创建了jenkins用户,并没有为其创建home目录

# vim ~/.bash_profile

在文件的最后添加 export PS1='[\u@\h \W]\$',执行文件使修改项起作用

# source ~/.bash_profile

验证是否成功   # su jenkins

二、为jenkins系统用户开启免密登录

1、在Jenkins的使用过程中,如果在脚本中使用到sudo命令,有可能出现如下所示的错误:

sudo: no tty present and no askpass program specified

这是因为Jenkins服务器在执行sudo命令时的上下文有误,导致这个命令执行的异常。

2.1 解决方法:

# sudo visudo

在文件末尾加上jenkins ALL=(ALL) NOPASSWD: ALL

2.2 重启jenkins,测试

# su jenkins

# sudo su -s /bin/bash jenkins

测试成功,jenkins免密登录成功。

PS:如果误 *** 作修改了/etc/sudoers的权限来修改上述文件,则会导致如下所示的错误:

sudo :/etc/sudoers is world writable

sudo : no valid sudoers source found, quitting

sudo : unable to initialize poling plugin

这是Linux的一种保护机制。因此,如果出现上述误 *** 作,则需要执行如下命令来解决:

$ pkexec chmod 0440 /etc/sudoers

三、jenkins用户开通ssh免没巧袜密登录

1、安装ssh

# yum install ssh

1.1 将ssh服务设置开机自启

# sudo systemctl enable sshd

1.2 启动ssh

# sudo systemctl start sshd

2、生成jenkins用户秘钥证书

# su jenkins

# ssh-keygen -t rsa

2.1 查看是否生成成功

# /var/lib/jenkins/.ssh/

# ls

3、将公钥传输到目标linux系统

ssh-copy-id -i /var/lib/jenkins/.ssh/id_rsa.pub root@目标ip:path

------------------------------------------------------------------------------------------

参考:https://blog.csdn.net/weixin_43840640/article/details/90371472


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/12303778.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存