我想制作一个自动脚本,该脚本调用ssh-keygen并创建一些稍后将使用的发布/私有密钥对。原则上一切正常....
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
...除了它要求我提供加密密钥的密码。这使得 - 目前 - 自动化变得困难。
我可以通过命令行参数提供密码-N thepassphrase,以防止出现提示。我什至不希望拥有密钥——另外通过加密保护——并且希望密钥对是明文。
这个问题的(最佳)解决方案是什么?
-q据称意味着“安静/静音”的选项仍然无法避免密码短语交互。我也没有找到这样的东西
ssh-keygen ... -q --no-passphrase
请不要开始说教或教导我“缺少密码”的利弊,我知道这一点。在交互式表单中(不是作为脚本),用户只需按两次 [ENTER],密钥将被保存为纯文本。这就是我想在这样的脚本中实现的目标:
#!/bin/bash 命令 1 命令 2 var=$(command3) # 这不应该停止脚本并要求输入密码 ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
我已经习惯了这样做:
someprogram >output.file
每当我想将程序生成的输出保存到文件时,我都会这样做。我也知道这个IO 重定向的两个变体:
someprogram 2>output.of.stderr.file (对于标准错误)someprogram &>output.stderr.and.stdout.file (对于 stdout+stderr 组合)今天我遇到了一个我认为不可能的情况。我使用以下命令xinput test 10,正如预期的那样,我有以下输出:
用户@主机名:~$ xinput 测试 10 按键 30 密钥释放 30 按键 40 密钥释放 40 按键 32 密钥发布 32 按键 65 密钥发布 65 按键 61 密钥发布 61 按键 31 ^C 用户@主机名:~$
我希望这个输出可以像往常一样保存到一个文件中,比如使用xinput test 10 > output.file. 但是当与我的期望相反时,文件 output.file 仍然是空的。这也是正确的,xinput test 10 &> output.file只是为了确保我不会错过 stdout 或 stderr 上的某些内容。
我真的很困惑,因此在这里询问该xinput程序是否有办法避免其输出被重定向?
我看过源码。似乎输出是由这段代码生成的(见下面的片段)。在我看来,输出将由普通的 printf 生成
//在文件test.c中 static void print_events(Display *dpy) …
每当我在 shell 中使用类似寻呼机less或编辑器nano(我的 shell 是 GNU bash)时,我都会看到一种我无法完全解释的行为,这与我可以使用其他工具(如cat或ls. 我想问一下这种行为是怎么产生的。
不容易解释的行为是,通常所有输出到 stdout/stderr 最终都被记录在终端模拟器后台缓冲区中,所以我可以向后滚动,而在使用lessor的情况下(对我来说不太正常)nano,输出由终端模拟器显示,但在退出程序时,内容“神奇地消失”。
我想举两个例子:
seq 1 200 (在后台缓冲区中生成 200 行)seq 1 200 | less (让我翻页 200 行,但最终“清理”并在后台缓冲区中没有记录任何内容)我的怀疑是某种转义代码在起作用,我很感激有人指出我对这种观察到的行为差异的解释。
由于一些评论和答案是措辞的,就好像我希望改变行为一样,这“很高兴知道”,但实际上所需的答案应该是对机制的描述,而不是改变它的方法。
我知道系统调用接口是在低级别实现的,因此依赖于体系结构/平台,而不是“通用”代码。
然而,我无法清楚地看到为什么 Linux 32 位 x86 内核中的系统调用在类似架构 Linux 64 位 x86_64 中具有不保持相同的编号?这个决定背后的动机/原因是什么?
我的第一个猜测是后台原因是保持 32 位应用程序可在 x86_64 系统上运行,以便通过对系统调用号的合理偏移,系统将知道用户空间是 32 位还是 64 位分别。然而事实并非如此。至少在我看来,在 x86_64 中 read() 是系统调用号 0 不能与这种想法保持一致。
另一种猜测是更改系统调用号可能有安全/强化背景,我无法确认这一点。
由于不知道实现依赖于体系结构的代码部分的挑战,我仍然想知道如何更改系统调用号,当似乎没有必要时(因为即使是 16 位寄存器也会存储更多,而不是当前的 ~346 个数字来表示所有调用),将有助于实现任何事情,除了破坏兼容性(尽管通过库 libc 使用系统调用可以缓解它)。
通常对于 arm 系统,设备树向内核 (Linux) 提供硬件信息。这些设备树作为编译并加载到内核的 dts(设备树源)文件存在。问题是我无权访问这样的dts文件,甚至无法访问dtb文件。
我可以访问/sys和/proc在机器上,我想问一下这是否允许我“猜测正确的值”以在 dts 中使用?
如果这个问题的答案还取决于是否首先使用了设备树接口(即 adtb被创建并提供给内核),而不是一些更多的黑客攻击,那么潜在的答案也可以突出另一个方面“我们只是从 vanilla 转移并修补内核以解决我们内核的设备信息问题“-解决方案?
我对用户空间和初始化系统(无论是经典的 init sysV /upstart/systemd)如何在系统关闭时工作有一个粗略的想法。(本质上有“停止!”、“请真正停止”、“过程我需要杀死你才能停止”和等待......事情正在进行中的顺序)。
无论如何,我非常不知道系统关闭在内核中是如何工作的(肯定还有很多事情要做)?
我试图查看内核文档https://www.kernel.org/doc/htmldocs/,甚至使用NSA 的 pal 搜索工具让我先了解它是如何工作的。
我还搜索了 SE U+L 并没有发现任何东西(我是否忽略了它?)
无论如何,这个问题虽然可能有点挑战性,但值得在这个问答网络中得到答案,因为我认为更多的人有兴趣了解关闭时 linux 内核中发生的情况。
可能还有更改以链接到一些更详细的解释。
答案可能包括使用了哪些系统调用和哪些内核信号?
https://github.com/torvalds/linux/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/arch/x86/kernel/reboot.c 似乎是与重启相关的 x86 使用文件(已经接近关闭,嗯?)
也许在这里找到的片段http://lxr.free-electrons.com/source/kernel/reboot.c#L176 可以用来解释
第176话
177 {
第178话
第179话
第180话
第181话
第182话
183 pr_emerg(“断电\n”);
184 kmsg_dump(KMSG_DUMP_POWEROFF);
第185话
第186话
第187话
玩 e2fsprogs debugfs,由于更改/意外,filen/ame创建了一个名为的文件。显然,正斜杠字符/用作路径名中的特殊分隔符。
仍在使用debugfs我想删除名为 的文件filen/ame,但我没有成功,因为该/字符没有被解释为文件名的一部分?
debugfs 是否提供删除包含斜杠的文件的方法?如果是这样怎么办?
我用了:
cd /tmp
echo "content" > contentfile
dd if=/dev/zero of=/tmp/ext4fs bs=1M count=50
mkfs.ext4 /tmp/ext4fs
debugfs -w -R "write /tmp/contentfile filen/ame" /tmp/ext4fs
debugfs -w -R "ls" /tmp/ext4fs
Run Code Online (Sandbox Code Playgroud)
输出:
debugfs 1.43.4 (31-Jan-2017)
2 (12) . 2 (12) .. 11 (20) lost+found 12 (980) filen/ame
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法来删除filen/ame文件:
debugfs 1.43.4 (31-Jan-2017)
2 (12) . 2 (12) .. 11 (20) lost+found 12 (980) filen/ame
Run Code Online (Sandbox Code Playgroud)
但这不起作用,只会产生:
debugfs …Run Code Online (Sandbox Code Playgroud) grsecurity默认情况下,内核中不包含补丁(或其带来的安全功能)的原因是什么?在考虑安全性的好处时,香草内核似乎非常不安全。
如果这是一种权衡(某些应用程序您想避免安全措施),似乎grsecurity可以在 vanilla 内核中启用它。
主流 vanilla 内核中有这么多东西,我很难理解为什么社区不想包含grsecurity.
或者是shutdown -h now它可以得到的最快的?
我寻找一些 syscall 或类似的东西,它们将允许跳过在关闭之前完成的大量工作(特别是关心正在运行的过程)。
充其量我想要一个与内核相关的解决方案,对init-middleware(如systemd或upstart)一无所知。
与即直接杀死所有服务(如cups/apache/pulseaudio 等)相关的风险......我不在乎......
备注:解决方案应该是软件副。在设备上按下按钮不是我想要的。
我在哪里可以找到xkb_symbols的列表及其含义?
为了澄清,让我举一些xkb_symbols 的例子:
dead_acutedollarDownDeleteadiaeresisAdiaeresisdead_circumflexKP_0 (KP_可能是“数字键盘”符号的前缀)KP_divide阅读这个Arch Wiki,我明白xkb_symbols实际上是数字。xkb_symbols 的那些数字被分配给某个地方的一些字符串表示(这主要是问题:在哪里?)。例如,您可以查看以下/usr/include/X11/keysymdef.h哪#defines一个:
#define XK_KP_0 0xffb0
虽然至少有我能找到XK_KP_0,这似乎重新取样KP_0(即简单又前缀),我仍然没有关于类似(即所有其他符号信息dead_circumflex,dollar等...)。
例如,我需要这样一个定义的字符串表示列表来创建、调整或修改键盘布局。当然,我可以从查看预先存在的键盘布局文件中获得一些见解,但需要参考它。因此,我会在这里请人指点我。
在用于定义、调整和修改位于此处的键盘布局的文件中,/usr/share/X11/xkb/symbols/例如de(德语)键盘布局/usr/share/X11/xkb/symbols/de,xkb_symbols被大量使用。
原则上这是这样一个文件的样子(取de文件的一部分):
// 基于来自“xkb/symbols/de”文件的键盘映射
默认
xkb_symbols“基本”{
包括“拉丁语(type4)”
名称[Group1]="德语";
键 { [ 2, 引用bl, twosuperior, oneeightth ] };
key { [ … linux ×3
linux-kernel ×2
shutdown ×2
arm ×1
debugfs ×1
device-tree ×1
ext4 ×1
grsecurity ×1
kernel ×1
pager ×1
performance ×1
scripting ×1
slash ×1
ssh ×1
system-calls ×1
terminal ×1
xinput ×1
xkb ×1