shell脚本sudo
❶ shell脚本中怎么实现:暂停,按键继续
1、其中 yum install tomcat 执行过程中需要用键盘输入两次字符”y”以便确认选项,Dockerfile 脚本命令如下。

❷ shell执行sudo命令时,自动输入密码
输入该命令后还需要用户输入sudo密码
自动输入密码方式1:
自动输入密码方式2:
其中123就是用户密码。
比如可以在shell脚本中输入用户密码,就可以自动执行sudo相关命令了。
❸ jenkins执行shell脚本,使用scp免密传输失败问题
问题: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--id -i /var/lib/jenkins/.ssh/id_rsa.pub root@目标ip:path
------------------------------------------------------------------------------------------
参考:https://blog.csdn.net/weixin_43840640/article/details/90371472
❹ 怎样通过shell脚本判断一个用户是否具有sudo权限
可是使用id命令来判断,supper权限的用户id貌似为0,那么你就判断一下子这个用户的id是否为0
id -u xxx
❺ ubuntu shell脚本的指令问题
如果说是 declare 命令不能用,那原因是由于你用的不是bash.如果是其他命令(你最好列出来具体的命令名字),要么是由于你没有使用和《鸟哥》里所使用的同样的shell,要么就是你的系统里没有安装对应的软件。
比方说,有的命令是shell自带的命令,如declare, let 等,如果你发现不能用,那是由于使用的shell 不同或者版本不同。
有的命令不是shell自带命令,而是系统中装的一些工具软件, 比如 find, tar, grep 等等,这种类型的命令数量远大于shell自带命令,在ubuntu默认安装中,很可能有一些没有安装,需要你自己去装。
所以具体你缺什么命令,不一定是shell的问题,也可能是你没有安装对应软件包。
最后,建议你还是用bash,毕竟是最流行的shell,大多数人,大多数教程,都讲得是它,所以不建议你初学时用其他shell,等对linux shell有一定了解后,再换到自己喜欢用的shell会比较合适。
❻ 在Ubuntu下编写shell脚本读取文件
需求功能:
创建测试用例文件 text :
创建shell脚本:
运行结果:
利用 awk 'END{print NR}' [文件名] 来输出行数:
在shell脚本中添加该功能:
运行结果:
上面的shell文件只是把文件名写死在脚本中,并没有实际使用意义,所以需要编写一个指令来指定需要读取的文件,就像 vim [文件名] 一样
“$1” 代表第1个参数,也就是在 read 之后紧跟的参数,将其作为文件名传入:
将脚本移动至环境变量对应的目录中:(可以自己更改 /bin/xxx 来决定运行命令的名称,但注意不能重复)
sudo mv read /bin/read
然后添加运行权限:
sudo chmod 755 /bin/read
打开终端的目录可以是任何位置,通过以下命令即可运行shell脚本:
sudo read [文件路径]
同理,我们还可以自己为复杂指令编写shell脚本,来提高命令的使用效率,例如开关ss服务,打开锐捷客户端认证等等。
❼ shell编程中,如何将编写的脚本把其脚本名当做shell命令来使用
首先确保你的shell脚本正确,且有执行权限。
然后sudo cp 目录/你的脚本文件名 /bin/你的脚本文件名
然后就可以了。
直接用
你的脚本文件名当作shell命令了。
看我的例子
sudocp/home/blue/mvmv.sh/bin/mvmv.sh
mvmv
然后我的桌面上的stop文件就变成了STOP了。(因为我的shell脚本如下)
#!/bin/bash
cd/home/blue/Desktop/
mvstopSTOP
说明这种方法成功。
❽ 编写的shell程序运行前必须赋予该脚本文件什么权限
程序要运行,就必须有执行权限。用代码表示为:chmod +x script.sh
有三种权限更改方式:chmod/acl/sudo
前两者用来更改文件权限,sudo用来更改应用程序或者是命令的执行权限
chmod的局限是无法实现多种权限分配(用户群体只有三种),面对多权限时需要用ACL进行设置
第一种:Chmod
chmod (agou)(+-)(rwx) filename
agou 表示文件权限更改影响的范围,分别代表all, group, others, user
+-表示增加或者删除权限
rwx表示具体的权限类型
chmod a+x test.txt 表示给test.txt的所有使用者增加执行权限
chmod a-x,a-w test.txt 表示去除所有人执行和更改test.txt的权限
chmod XXX filename
三类用户一起设置,第一个X代表所有者,第二个X代表所属组,第三个X代表其他
r(4) w(2) x(1): chmod 755 test.txt 给test.txt的owner设置rwx的权限,给其他所有用户设置rx权限因为要计算每一种用户的权限,多用于批量处理权限。对用户单独设置权限多用英文,而非数字
权限细化的问题,chmod最多只有三个权限组,当有多个用户,并且每个用户的权限都不一样时,chmod有局限性。
第二种:ACL(setfacl/getfacl)
文件和文件夹的权限:
如果有多个用户组,权限设置是很复杂的事情,需要仔细规划(ACL和Chmod混合使用容易产生一些权限问题,建议单独使用)
文件夹的读权限:可以列出目录下内容
文件夹执行权限:可以进入到文件夹中,执行切换目录等操作
文件夹的写权限:可以在文件夹中增删文件
用户对某个文件有了rwx权限,不代表用户有权删除该文件,只代表对文件内容有了删除权限,要能对文件级别进行操作,需要设置相应的文件夹的w权限。
getfacl filename/filedirectory
查看文件/文件夹 权限:结果会展示user,group和other的整体权限,以及特殊用户的权限
setfacl -m u:username:rwx filename
给某个用户添加对某个文件或者文件夹的特殊权限
给普通用户添加完相应权限以后,root也会有相应的权限(理论上root拥有最多的权限)
setfacl -x u:username filename
删除用户对某个文件或者是文件夹的特殊权限
第三种:SUDO
不同于chmod/acl 设置某个文件的权限,sudo主要是为非root用户增加系统的处理和执行权限。比如只有root有useradd权限,通过sudo,可以为普通用户增加useradd权限。
为普通用户增加权限有两种方式:带密码验证和不带密码验证,并且可以指定sudo可运行的机器。
使用sudo有两个步骤:1. visudo编辑权限 2. 普通用户在使用命令前添加sudo
创建无密码sudo(执行脚本时通常采用无密码sudo)
编辑visudo: 运行visudo, 采用Vim编辑器编辑添加 sr localhost=NOPASSWD:/usr/sbin/useradd,给用户sr添加“添加用户”的超级权限
切换到sr用户
sudo useradd testadd,在sr模式下添加新的用户
创建有密码sudo(可以确保有密码用户才使用此命令)
编辑visudo: 运行visudo, 采用Vim编辑器编辑添加 sr localhost=/usr/sbin/useradd,给用户sr添加“添加用户”的超级权限
切换到sr用户
sudo useradd testadd,系统会弹出命令提示,验证完命令以后sr可以成功添加用户
