我需要做的就是以特定用户身份运行特定脚本,该用户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发送到我需要运行的脚本。
我想启动进程(例如 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。
通常在使用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。
我们有一个堡垒服务器,我们用来连接到多个主机,我们的 .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 的文档,但我认为这是不可能的。但也许其他人也遇到了类似的问题并找到了解决方案。
例如,我有一个简单的 bash 文件
#!/bin/bash
cd ~/hello
ls
Run Code Online (Sandbox Code Playgroud)
如何让它在执行之前显示每个命令?Windows 批处理脚本中“@echo off”的效果正好相反。
我正在寻找一种简单的方法从我的本地机器 A SSH 通过代理 B 到目标主机 C。与 C 上的公钥一起使用的私钥在 B 上,但我不能把那个钥匙放在我的本地机器上。有小费吗?
另外,我希望能够使用 ~/.ssh/config 执行此操作。
谢谢!
我有一个只能以我的用户名 (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 目录,其中包含一个空格。
无论引用多么复杂/疯狂,是否有通用解决方案允许我传递任何命令,或者这是我达到的某种限制?是否有其他可能的,也许更具可读性的解决方案?
正是标题所说的。我没有太多运气找到合适的文档来查看 -xe 在以下用例中的作用:
#!/bin/bash -xe
这些参数有什么作用以及记录在哪里?
管理员通过个人用户名登录服务器,然后运行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 安装在更新后不再受到ShellShock错误的影响?