如何使用 su 启动交互式 bash

如何使用 su 启动交互式 bash

我没有sudo su用户名,但是我有密码。我想要一个脚本来传递密码并给我一个交互式 bash。

我尝试过这个:

echo mypassword | su - otherusr
Password: Last login: Wed Jul 25 12:09:38 COT 2018
[myuser@myserver ~]$ 

它将我返回到我的用户,并且我没有与其他用户进行交互式 bash。

我也尝试过:

echo mypassword | su -c "/bin/bash" - otherusr
echo mypassword | su -s "/bin/bash" - otherusr
echo mypassword | su -c "/bin/bash -i" - otherusr
Password: bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
bash-4.2$ exit

我该怎么做?我想创建一个脚本,返回与另一个用户的交互式 bash 会话;而不仅仅是与另一个用户一起执行命令。

答案1

默认情况下,sudonor都不会su从 stdin 读取密码。它们会尝试直接使用终端设备(某些实现在管道中使用时甚至会发出警告)。有sudo -S选项可以更改此行为,但据我所知,没有类似的选项su

解决方案:使用expect

expect是一个根据脚本与其他交互程序“对话”的程序。按照脚本,expect知道程序可以做什么以及正确的响应应该是什么。

[…]

一般来说,expect对于运行任何需要程序和用户之间交互的程序来说,它都很有用。唯一需要的是,交互可以通过编程来描述。

对于你的情况,脚本可能是:

#!/usr/bin/expect 

log_user 0
spawn /bin/su - otherusr
expect "Password: "
send "mypassword\n"
interact

我建议将此脚本仅供您访问(chmod go-rwx)。不应允许其他用户阅读它,因为它包含mypassword纯文本;不应允许他们运行它,因为它会授予otherusr的 shell 访问权限。

相关内容