我想/bin/rbash用 Ansible管理一堆作为默认 shell运行的设备。
问题是 Ansible 总是试图执行一个rbash根本不喜欢的命令列表:
umask 77 && mkdir -p \"` echo ./ansible-tmp-1460362654.19-62671997084808 `\" && echo \"` echo ./ansible-tmp-1460362654.19-62671997084808 `\"
Run Code Online (Sandbox Code Playgroud)
任何想法如何避免此命令?
澄清一下:我想更改 Ansible 使用的 shell,并且只有一个用户可用。
我正在尝试在 sudo-less 用户中的远程主机上获取我的 .bashrc 文件。我收到以下回复。
sh-4.2$ source .bash_profile
sh-4.2$ source: .bash_profile: file not found
sh-4.2$ source ~/.bash_profile
[user@hera ~]$
Run Code Online (Sandbox Code Playgroud)
为什么会出现这种行为?
.bashrc 的内容
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
# added by Anaconda3 4.1.1 installer
export PATH="/home/tensorflow/anaconda3/bin:$PATH"
Run Code Online (Sandbox Code Playgroud) 我有一个具有 ssl-cert 读取权限的目录:
root@yellowstone:~/certs# ls -lah
total 28K
drwxr-x--- 2 root ssl-cert 4.0K Oct 23 16:58 .
drwx------ 7 root root 4.0K Oct 23 17:20 ..
-rw-r--r-- 1 root ssl-cert 2.0K Oct 23 16:58 certificate1.crt
-rw-r--r-- 1 root ssl-cert 2.0K Oct 23 16:58 certificate2.crt
-rw-r--r-- 1 root ssl-cert 2.0K Oct 23 16:58 certificate3.crt
-rw-r----- 1 root ssl-cert 3.2K Oct 23 16:58 privatekey.key
-rw-r--r-- 1 root ssl-cert 2.0K Oct 23 16:58 certificate4.crt
Run Code Online (Sandbox Code Playgroud)
我在 ssl-cert 组中有一个用户:
root@yellowstone:~/certs# id prosody
uid=116(prosody) gid=124(prosody) groups=124(prosody),115(ssl-cert) …Run Code Online (Sandbox Code Playgroud) 正如标题一样,我想记录 bash 显示的所有内容,即输入和相关输出。
假设我想要所有内容的“历史”,而不仅仅是输入命令。
我希望将日志存储在不同的文件中,例如每个会话有一个文件(从 shell 的打开到其终止)。
有任何想法吗?
我是 bash/shell 脚本方面的新手,我正在尝试从 mysql 数据库中远程选择并检查记录是否存在。基于响应会做一些事情。
这是我的命令
mysql -u mysql -pMysql123 -h xxx.xxx.xxx.xxx MYDBNAME -e "select count(column) from TABLE where column=1234;"
Run Code Online (Sandbox Code Playgroud)
当我直接在终端中运行此命令时,我得到了正确的响应。所以我试图把它放在这样的脚本中
#!/bin/bash
count=mysql -u mysql -pMysql123 -h xxx.xxx.xxx.xxx MYDBNAME -e "select count(column) from TABLE where column=1234;"
if [ $count -gt 0 ]
then
echo " greater that 0 "
else
echo " lower than 0 "
fi
Run Code Online (Sandbox Code Playgroud)
当我执行上面的脚本时,输出是
$ ./check.sh
./check.sh: 第 3 行: -u: 命令未找到
./check.sh: 第 5 行: [: -gt: 预期的一元运算符
低于 0
感谢您对此的任何帮助。谢谢。
我正在尝试为 cronjob 编写一个简单的 bash 脚本来检查是否存在某些接口(隧道)。如果不是,我想启动另一个(重新)启动它们的脚本。我的问题是:我没有让“IF”工作:
#!bin/bash
for i in tun1 tun2 tun3 tun3 tun4 tun5
do OUT="$(ip a show $i up)";
if [[ $OUT == *"does not exist."* ]]; then
echo "$i is down"
else
echo "$i is up"
fi
done
Run Code Online (Sandbox Code Playgroud)
当前输出为:
./check_tunnel.sh
tun1 已启动
tun2 已启动
tun3 已启动
tun3 已启动
tun4 已启动
设备“tun5”不存在。
tun5 已启动
我希望我的所有用户都可以运行 bash 脚本。但是这个 bash 脚本需要有 root 权限,我希望这个脚本是只读的并且以 root 权限运行
我的 bash 脚本:
#!/bin/bash
/sbin/swapoff -a
Run Code Online (Sandbox Code Playgroud)
在我的搜索中,我找到了解决方案,但它不起作用,这是解决方案:
# chown root:root monshell.sh
# chmod 4755 monshell.sh
# exit
$ ./monshell.sh
Run Code Online (Sandbox Code Playgroud)
但是当我使用基本用户运行时出现此错误:swapoff:不是超级用户。
在 bash 脚本中导出期间,我需要通过命令行传递密码。
IBM 在他们的网站上有这个
openssl pkcs12 -export -in "$pem" -inkey "$key" -out "$pfx" -passout pass:pkcs12 "$pfxpass";
Run Code Online (Sandbox Code Playgroud)
以上对我不起作用。
下面的命令有效,但系统会提示您输入并重新输入密码。
openssl pkcs12 -export -in "$pem" -inkey "$key" -out "$pfx";
Run Code Online (Sandbox Code Playgroud)
这怎么能被脚本化?
我在我的 Debian/Apache2.4 服务器上有一个用 Python 编写的 webhook 脚本,以便它在推送 GitHub 时运行部署 .sh 脚本。因此,该脚本由标准 Apache 用户“www-data”执行。我的脚本需要重新启动或加载了Apache,但输出表示用户不必这样做的许可:Reloading apache2 configuration (via systemctl): apache2.serviceFailed to reload apache2.service: Access denied。手动执行时的行为与 www-data ( sudo -u www-data /etc/init.d/apache2 reload) 相同。
因此,我尝试通过将以下行添加到我的 visudo 中来使“www-data”具有重新加载或重新启动 Apache 的权限:(www-data ALL = NOPASSWD: /etc/init.d/apache2根据此文档)。
但它不会改变任何东西。为什么?是不是因为Apache无法重新加载自己?如何更改权限以执行此操作?或者我是否需要由另一个用户执行脚本,以及如何执行?
我在这里有点困惑,并不确定如何调试它。我有一个自己编写的 bash 脚本,用于检查 samba 共享是否处于活动状态,如果没有,则向我发送电子邮件。
脚本在 /root/SKRIPTS/ 中,权限如下所示:
-rwxr-xr-x 1 root wheel 281 Nov 8 08:54 test_samba_shares.sh
-rwx------ 1 root wheel 39 Nov 7 13:56 smbclient.cred
Run Code Online (Sandbox Code Playgroud)
.sh 脚本的内容是这样的:
smbclient -L 10.0.0.1 -A /root/SKRIPTS/smbclient.cred | grep -q Backup
if [ $? -eq 0 ]
then
echo "Backup_* mounted, nothing to do"
else
echo "Subject: Samba has failed" | /usr/sbin/sendmail -v mail@localmail.server
fi
return 1;
Run Code Online (Sandbox Code Playgroud)
/etc/crontab 看起来像这样(仅限条目)
10 1 * * * root /root/SKRIPTS/test_samba_shares.sh
Run Code Online (Sandbox Code Playgroud)
问题是,如果我以 root 身份运行它,它就可以完美运行。但是每天晚上我都会收到一封电子邮件,说 samba 失败了,表明 cron 脚本以某种方式进入了 else …