标签: bash

Ansible 和 rbash

我想/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,并且只有一个用户可用。

bash ansible

1
推荐指数
1
解决办法
852
查看次数

'source .bash_profile' 失败,但 'source path/to/.bash_profile' 有效

我正在尝试在 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)

为什么会出现这种行为?

添加图像

.bash_profile 的内容

.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)

linux ssh bash bashrc

1
推荐指数
1
解决办法
1004
查看次数

即使权限正确也无法读取文件

我有一个具有 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)

linux permissions bash file-permissions

1
推荐指数
1
解决办法
5476
查看次数

有没有办法记录所有 bash 显示的文本(输入和输出)?

正如标题一样,我想记录 bash 显示的所有内容,即输入和相关输出。

假设我想要所有内容的“历史”,而不仅仅是输入命令。

我希望将日志存储在不同的文件中,例如每个会话有一个文件(从 shell 的打开到其终止)。

有任何想法吗?

linux shell bash history logging

1
推荐指数
1
解决办法
223
查看次数

从bash中选择远程数据库

我是 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

感谢您对此的任何帮助。谢谢。

mysql shell bash shell-scripting

1
推荐指数
1
解决办法
2815
查看次数

用于检查隧道是否存在的简单 bash 脚本[捕获标准输出和标准错误]

我正在尝试为 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 已启动

linux bash interface

1
推荐指数
1
解决办法
841
查看次数

允许所有用户以 root 身份执行 bash 脚本

我希望我的所有用户都可以运行 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 root

1
推荐指数
1
解决办法
789
查看次数

如何使用命令行上的密码将我的 pem 文件导出到 pfx

在 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)

这怎么能被脚本化?

password bash openssl convert

1
推荐指数
1
解决办法
8965
查看次数

以“www-data”用户身份重新启动或重新加载Apache

我在我的 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无法重新加载自己?如何更改权限以执行此操作?或者我是否需要由另一个用户执行脚本,以及如何执行?

linux permissions bash sudo apache-2.4

1
推荐指数
1
解决办法
5397
查看次数

如果条件允许,Crontab 会影响 bash 脚本?

我在这里有点困惑,并不确定如何调试它。我有一个自己编写的 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 …

scripting linux bash cron

1
推荐指数
1
解决办法
409
查看次数