标签: bash

如何以 /usr/sbin/nologin 作为 Shell 的用户身份运行命令?

我需要做的就是以特定用户身份运行特定脚本,该用户nologin/false/etc/passwd.

我会以 root 身份运行脚本,这应该以另一个用户身份运行。跑步:

~# su -c "/bin/touch /tmp/test" testuser
Run Code Online (Sandbox Code Playgroud)

会工作,但我需要一个有效的测试用户外壳。我知道我可以禁用密码passwd -d testuser并将外壳保留为/bin/bash这种方式会安全一点,但我需要有nologin/false外壳。

基本上我需要的是crontab当我们将作业设置为以特定用户身份运行时会做什么,而不管这个用户是否有nologin/falseshell。

ps 我发现这个线程Executing a command as a nologin user,但我不知道如何concatenate将命令su -s /bin/sh $user发送到我需要运行的脚本。

linux su login shell bash

104
推荐指数
3
解决办法
14万
查看次数

如何获取刚刚启动的进程的pid

我想启动进程(例如 myCommand)并获取它的 pid(以允许稍后杀死它)。

我试过 ps 并按名称过滤,但我无法按名称区分进程

myCommand
ps ux | awk '/<myCommand>/ {print $2}' 
Run Code Online (Sandbox Code Playgroud)

因为进程名称不是唯一的。

我可以通过以下方式运行进程:

myCommand &
Run Code Online (Sandbox Code Playgroud)

我发现我可以通过以下方式获得这个 PID:

echo $!
Run Code Online (Sandbox Code Playgroud)

有没有更简单的解决方案?

我很乐意执行 myCommand 并通过一行命令获取其 PID。

linux unix bash process pid

99
推荐指数
6
解决办法
21万
查看次数

mysqldump 到 tar.gz

通常在使用mysqldump命令转储 MySQL 数据库后,我会立即 tar/gzip 生成的文件。我正在寻找一种在一个命令中执行此操作的方法:

所以从这个:

mysqldump dbname -u root -p > dbname.sql
tar czvf dbname.sql.tgz dbname.sql
rm dbname.sql
Run Code Online (Sandbox Code Playgroud)

对于这样的事情:

mysqldump dbname -u root -p > some wizardry > dbname.sql.tgz
Run Code Online (Sandbox Code Playgroud)

或者甚至更好(因为我通常将转储文件 scp 到另一台服务器):

mysqldump dbname -u root -p > send dbname.sql.tgz to user@host
Run Code Online (Sandbox Code Playgroud)

我在 debian 上运行 bash。

mysql debian bash tar gzip

98
推荐指数
5
解决办法
16万
查看次数

你可以有多个 ~/.ssh/config 文件吗?

我们有一个堡垒服务器,我们用来连接到多个主机,我们的 .ssh/config 已经增长到一千多行(我们有数百个我们连接到的主机)。这开始变得有点笨拙,我想知道是否有办法将 .ssh/config 文件分成多个文件。理想情况下,我们会在某处指定其他文件将被视为 .ssh/config 文件,可能如下所示:

~/.ssh/config
  ~/.ssh/config_1
  ~/.ssh/config_2
  ~/.ssh/config_3
  ...
Run Code Online (Sandbox Code Playgroud)

我已阅读有关 ssh/config 的文档,但我认为这是不可能的。但也许其他人也遇到了类似的问题并找到了解决方案。

linux unix ssh bash

98
推荐指数
4
解决办法
5万
查看次数

如何让 bash 脚本在执行之前打印出每个命令?

例如,我有一个简单的 bash 文件

#!/bin/bash
cd ~/hello
ls
Run Code Online (Sandbox Code Playgroud)

如何让它在执行之前显示每个命令?Windows 批处理脚本中“@echo off”的效果正好相反。

scripting bash debugging

95
推荐指数
5
解决办法
12万
查看次数

从 A 到 B 到 C 的 SSH,使用 B 上的私钥

我正在寻找一种简单的方法从我的本地机器 A SSH 通过代理 B 到目标主机 C。与 C 上的公钥一起使用的私钥在 B 上,但我不能把那个钥匙放在我的本地机器上。有小费吗?

另外,我希望能够使用 ~/.ssh/config 执行此操作。

谢谢!

linux firewall ssh bash proxy

85
推荐指数
4
解决办法
7万
查看次数

如何在 ssh 上使用 sudo 运行任意复杂的命令?

我有一个只能以我的用户名 (myuser) 登录的系统,但我需要以其他用户 (scriptuser) 身份运行命令。到目前为止,我想出了以下来运行我需要的命令:

ssh -tq myuser@hostname "sudo -u scriptuser bash -c \"ls -al\""
Run Code Online (Sandbox Code Playgroud)

但是,如果当我尝试运行更复杂的命令时,例如[[ -d "/tmp/Some directory" ]] && rm -rf "/tmp/Some directory"我很快就会遇到引用问题。我不确定如何将这个示例复杂命令传递给bash -c,当\"已经分隔了我传递的命令的边界时(所以我不知道如何引用 /tmp/Some 目录,其中包含一个空格。

无论引用多么复杂/疯狂,是否有通用解决方案允许我传递任何命令,或者这是我达到的某种限制?是否有其他可能的,也许更具可读性的解决方案?

scripting ssh bash sudo

83
推荐指数
6
解决办法
7万
查看次数

将 -xe 参数传递给 /bin/bash 有什么作用

正是标题所说的。我没有太多运气找到合适的文档来查看 -xe 在以下用例中的作用:

#!/bin/bash -xe

这些参数有什么作用以及记录在哪里?

scripting bash

82
推荐指数
2
解决办法
4万
查看次数

记录管理员在生产服务器上运行的所有命令

管理员通过个人用户名登录服务器,然后运行sudo -i成为 root ,这是公司的政策。运行时sudo -i,sudo 将创建一个名为 的环境变量SUDO_USER,其中包含原始用户的用户名。

有没有办法使用类似于以下语法的内容在 syslog 中记录所有命令:

${TIME/DATE STAMP}: [${REAL_USER}|${SUDO_USER}]: ${CMD}
Run Code Online (Sandbox Code Playgroud)

一个示例条目是:

Sat Jan 19 22:28:46 CST 2013: [root|ksoviero]: yum install random-pkg
Run Code Online (Sandbox Code Playgroud)

显然它不必完全是上述语法,它只需要包含最少的真实用户(例如 root)、sudo 用户(例如 ksoviero)和运行的完整命令(例如 yum安装随机包)。

我已经试过了snoopy,但它不包括SUDO_USER变量。

bash logging centos sudo

80
推荐指数
3
解决办法
10万
查看次数

80
推荐指数
2
解决办法
6万
查看次数

标签 统计

bash ×10

linux ×4

scripting ×3

ssh ×3

sudo ×2

unix ×2

centos ×1

cgi ×1

debian ×1

debugging ×1

firewall ×1

gzip ×1

logging ×1

login ×1

mysql ×1

pid ×1

process ×1

proxy ×1

security ×1

shell ×1

su ×1

tar ×1