当键盘布局不适合时,如何在“sudo”中输入非 ASCII 字符(ö)?

当键盘布局不适合时,如何在“sudo”中输入非 ASCII 字符(ö)?

不幸的是,我在将 Ubuntu 16.04 升级到 18.04 时损坏了我的系统。

Alt我可以使用+访问命令行F2,但要使用,sudo我需要输入变音符号,因为它们在我的密码中。但 shell 键盘已恢复为英文布局。

我试过按Alt+ 246,但是不起作用。

有人有其他想法吗?我怎样才能输入变音符号?或者在不使用的情况下恢复到德语布局sudo

答案1

sudo -S将从 stdin 读取密码。现在您需要一种方法将密码打印到 stdout,以便将其通过管道传输到sudo -S

在我的 Debian 9 中,支持 UTF-8 的 Bash 中,以下每个命令都会打印pa%wörd一个尾随换行符:

  • echo -e 'pa%w\xc3\xb6rd'– 因为echo内置如何使用来扩展其参数-e
  • /bin/echo -e 'pa%w\xc3\xb6rd'– 因为echo命令如何使用来扩展其参数-e
  • printf '%s\n' $'pa%w\xc3\xb6rd'– 因为 Bash 的扩展方式$'…'
  • printf 'pa%%w\303\266rd\n'– 因为格式的printf工作方式;
  • printf '%b\n' 'pa%w\0303\0266rd'– 因为它%bprintf工作方式。

一般来说,它们的数量更多。注意echo的是不是最好的选择并且$'…'需要你的 shell 来理解它。最后两个解决方案printf是可移植的。

十六进制编码\xc3\xb6取自printf '%s' 'ö' | xxd系统上的输出,我可以在其中键入或粘贴ö。该信息也可用在维基百科上.\303\266来自 的输出printf '%s' 'ö' | od -d;或者可以将十六进制值转换为八进制。

如果您可以将密码打印到标准输出,那么您就可以获得 sudo 访问权限:

printf 'pa%%w\303\266rd\n' | sudo -S whoami

启动这样的交互式 shell 可能比较棘手,因为这种 shell 需要其 stdin 是终端,而不是管道。希望您sudo缓存了凭据,因此如果您先调用上述命令,然后sudo su -紧接着调用,那么后者可能会起作用。

如果没有,请编写一个打印密码的脚本并将其用于sudo -A

SUDO_ASKPASS='/path/to/script' sudo -A su -

相关内容