以其他用户的名义运行交互式 shell 脚本
在我的 shell 脚本(bash)中,我想调用其他 shell 脚本。
我以 user_A 身份运行我的脚本。 这些脚本之一需要特殊处理:
- 它必须以不同的用户身份运行 (用户_B)。这里需要密码。
- 它是互动的,但不仅仅是询问 问题但运行另一个脚本 另一个用户的名称 (user_C) 使用 苏。我必须在这里输入密码 以及。
我可以使用 su 调用这个脚本,但它的问题必须以某种方式得到回答。我无法输入任何内容,因为它为每个问题打印“stty::不是打字机”
我以这种方式调用特殊脚本
su user_B << ABC
...
special_script
...
ABC
In my shell script (bash) I want to call other shell scripts.
I run my script as user_A.
One of these scripts needs special handling:
- It has to be run as different user
(user_B). Password needed here. - It is interactive, but not only asks
questions but runs another script in
name of another user (user_C) using
su. I have to enter a password here
as well.
I can use su calling this script but its questions have to be answered somehow. I can not enter anything because it prints for each questons "stty: : Not a typewriter"
I'm calling the special script this way
su user_B << ABC
...
special_script
...
ABC
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
它适用于 1 个用户,因此现在为第二个用户添加“if ...”
It works for 1 user, so now add 'if ...' for second user
以其他用户身份运行脚本的另一个选项是“sudo”命令,出于可读性目的,将其视为“超级用户 do:”。 -u 参数提供用户名信息。因此:
sudo -u user_Bspecial_script
将提示输入 user_B 的密码。我在使用它运行交互式程序时从未遇到过问题。您可以通过 visudo 命令管理谁可以对谁进行 sudo。
Another option for running scripts as other users is the 'sudo' command, think of it as 'superuser do:' for readability purposes. The -u parameter gives username information. So:
sudo -u user_B special_script
Will prompt for the password for user_B. I've never had a problem with running interactive programs using it. You can manage who can sudo to whom via the visudo command.
您可以使用 sudo 并创建一个 sudoers 文件,该文件允许 user_A 以 user_B 身份运行脚本。
像这样的行:
将允许 user_A 执行类似操作
而不要求输入密码
You can use sudo and create a sudoers file which allows user_A to run the script as user_B.
a line like:
would allow user_A to do something like
without asking for a password
su
尝试从终端获取密码,并且需要一个 tty 设备,以便它可以调用ioctl
来关闭按键回显。由于标准输入来自“此处文档”(ABC),因此尝试在文件描述符 0 上调用 ioctl 会产生“不是 tty”。如果您必须使用此处文档而不是善意脚本,请执行以下操作:
su
attempts to get a password from the terminal and needs a tty device so it can callioctl
to turn off key echoing. Since the standard input is coming from a "here document" (ABC), an attempt to call the ioctl on file descriptor 0 yields "not a tty".If you must use a here document instead of a bona fide script, do:
您可能想要使用
expect
。它是为脚本化交互而设计的。You may want to use
expect
. Its designed for scripted interaction.