我没有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
默认情况下,sudo
nor都不会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 访问权限。