我想编写一个脚本,允许我将密码传递给su
命令。这样做的原因是为了自动化从非 root 帐户登录到 root 的过程。从我对安全的基本了解来看,我知道这样做的危险。我仍然需要它来尝试通过从文件中读取密码来破解 root 用户密码。
我听说过使用该expect
命令来自动化交互,但我不知道它是如何工作的,或者它是否适用于这种情况。任何有关使用的信息expect
将不胜感激。
请注意,这sudo
不是一个选项,因为我的用户不在 sudoer 列表中。
我尝试过的事情 - 使用管道传递密码由于类型错误而不起作用"su must be used from terminal"
- 使用回显的内容传递密码echo
只会在输入密码后显示
答案1
做这种“单线风格”
expect -c 'spawn su - ;expect Password:;send "your-password\n";interact'
查看输出以su -
确保这是否是用于捕获密码的正确短语。我在这里使用的是 Linux 的翻译版本,因此单词应该是“Senha:”而不是“Password:”。
expect -c ''
:对此命令运行以下操作spawn su -
:执行该命令expect Password:
期望密码这个词能做某事send "your-password\n"
:输入您的密码,然后按 Enter 键interact
:保持对命令的交互准备。
答案2
您可以用来expect
为您完成这项工作。将以下内容保存到文件中,使其可执行,然后运行它:
#!/usr/bin/expect
spawn su
expect "Password:"
send "YOUR_PASS\n"
interact
(显然,你需要指定正确的路径expect
。这里我/usr/bin/expect
以作为例子。)
如果YOUR_PASS
root 密码正确,您现在应该拥有 root shell。如果没有,您将收到身份验证失败的消息。
interact
请注意,在完全自动化的脚本上下文中可能不需要该命令,因为它将进程的控制权交给了用户,即将击键发送到当前进程并返回 stderr 和 stderr。
man expect
有关命令spawn
、expect
、send
和interact
以及许多其他命令的更详细说明,请参阅 参考资料。