有没有办法以编程方式获取 SSH 服务器密钥指纹而不对其进行身份验证?
我正在尝试ssh -v user@host false 2>&1 | grep "Server host key"
,但如果未设置基于密钥的身份验证,则会挂起等待密码。
root@system:~# less myfile
-bash: /bin/less: Input/output error
Run Code Online (Sandbox Code Playgroud)
根文件系统已死。但我的猫还活着(在我的记忆中):
root@system:~# cat > /tmp/somefile
C^d
root@system:~#
Run Code Online (Sandbox Code Playgroud)
虽然他有点孤独,但他所有的朋友都走了:
root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error
Run Code Online (Sandbox Code Playgroud)
该系统仍在运行,并实现其目的。我知道,我知道,对此唯一明智的反应是关闭系统并更换根驱动器。不幸的是,这不是一个选择,因为它会花费大量的时间和金钱。此外,它会杀死我的猫,这会让我感到难过。
我想从捐赠者那里带他平时的朋友。我不敢尝试 scp 它们,以防 ssh 尝试加载它并切断线路(无论如何二进制文件已经消失了)。这听起来像是我猫表弟的工作:
root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found
Run Code Online (Sandbox Code Playgroud)
可惜他早已不在了。
现在,我可以尝试欺骗我的猫执行一个仪式来复活他:
cat > netcat < /dev/tcp/localhost/9999
Run Code Online (Sandbox Code Playgroud)
那种工作。他几乎还活着:
root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied
Run Code Online (Sandbox Code Playgroud)
他只需要一点点生命的火花。那个+x
我现在无法背诵的小魔法咒语。
你能帮我把我猫的朋友带回来吗?
安装到根 btrfs 文件系统时,许多 Linux 发行版安装到默认子卷。如果不修改,此布局将强制在根文件系统内创建任何新快照或子卷,这非常令人困惑,因为快照包含自己:
/
??dev
??home
??var
??usr
??...
??snapshots
??snap1
Run Code Online (Sandbox Code Playgroud)
一个更容易理解的默认子卷布局是:
/
??subvolumes
? ??root
? ??dev
? ??home
? ??var
? ??usr
? ??...
??snapshots
??snap1
Run Code Online (Sandbox Code Playgroud)
如何在不从 livecd 启动的情况下更改发行版默认的 btrfs 安装以使用此子卷布局?
使用循环挂载用户创建的 btrfs 文件系统,并正确设置权限,用户可以自由创建 btrfs 子卷:
user@machine:~/btrfs/fs/snapshots$ /sbin/btrfs sub create newsubvol
Create subvolume './newsubvol'
Run Code Online (Sandbox Code Playgroud)
但是,尝试删除新创建的子卷会导致错误:
user@machine:~/btrfs/fs/snapshots$ /sbin/btrfs sub del newsubvol
Delete subvolume '/home/user/btrfs/fs/snapshots/newsubvol'
ERROR: cannot delete '/home/user/btrfs/fs/snapshots/newsubvol'
Run Code Online (Sandbox Code Playgroud)
当然,root 用户可以删除它:
root@machine:/home/user/btrfs/fs/snapshots# /sbin/btrfs sub del newsubvol
Delete subvolume '/home/user/btrfs/fs/snapshots/newsubvol'
Run Code Online (Sandbox Code Playgroud)
create 和 delete 操作之间的这种行为差异似乎有点奇怪。任何人都可以对此有所了解吗?
这是命令的确切顺序:
user@machine:~$ dd if=/dev/zero of=btrfs_disk bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 1.2345 s, 84.9 MB/s
user@machine:~$ mkdir mountpoint
user@machine:~$ /sbin/mkfs.btrfs btrfs_disk
WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before …
Run Code Online (Sandbox Code Playgroud) 假设您有目录/dir1
and /dir2/linked
,其中后者是前者的符号链接。
当您cd
使用linked
和 时pwd
,您会得到输出/dir2/linked
。如果你那样cd ..
,你会被穿上/dir2
。这种行为与你/dir2/linked
之前的概念是一致的。但是,据我所知,..
任何目录的父目录 ( ) 都存储在目录 inode 中(即:物理上在磁盘中)。显然,既然/dir2/linked
是真的/dir1
,那么inode上的父目录必须是/
为了进一步使问题复杂化,而里面/dir2/linked
的输出ls ..
和cd .. ; ls .
是不同的!似乎cd
尊重符号链接的路径,同时ls
尊重“物理”路径。正如在这个问题中提到的cd -P
,这个用例是有的。
man pwd
提到了“物理”和“逻辑”工作目录,但此时我仍然有几个问题:
PWD
环境变量提供,如man pwd
?cd
并ls
有不同的行为,如果它们都是 shell 命令(即:不是程序)?PWD
物理路径而不是物理路径?我意识到这取决于实施,但有什么经验法则吗?如果任何其他(手动安装的)软件包建议这些软件包,似乎 aptitude 不会删除不依赖的自动安装的软件包。
root@host:/# aptitude install unattended-upgrades
The following NEW packages will be installed:
iso-codes{a} lsb-release{a} python-apt{a} python-apt-common{a} python2.6{a} python2.6-minimal{a} unattended-upgrades
...
root@host:/# aptitude remove unattended-upgrades
The following packages will be REMOVED:
unattended-upgrades
...
root@host:/# aptitude why python-apt
i apt Suggests python-apt
Run Code Online (Sandbox Code Playgroud)
我可以(以某种方式)理解为什么这是可取的,但是有什么方法可以覆盖它
假设您在在线系统上有一个 btrfs 根文件系统。您想将文件系统恢复到较早的状态,其中您有一个快照:
remount /dev/sdaX / -o remount,subvol=snapshots/Y
为了记录在案,我一直在测试系统中做到了这一点,它并没有正常工作。命令返回没有错误,但安装的子卷是相同的。
如果这样做有效,会产生什么后果?我的猜测是打开的文件描述符仍会指向旧的子卷,因此如果不小心,可能会导致新子卷上的“数据丢失”。假设一个人在关闭和重新打开所有打开的文件描述符时遇到了麻烦,这听起来可行吗?或者还有其他类型的问题?
给定一个块设备,我怎样才能得到它的“父”?
一个例子是 LUKS 虚拟解密设备 (/dev/mapper/decrypted),其父设备将是加密块设备 (/dev/sdb)
有没有办法告诉,给定一个 LUKS 块设备的路径,并且不知道密码,设备是否已经打开(解密)?
知道解密设备的路径怎么样?
我已经在 EC2 上设置了一台运行 Debian Stretch 的机器。在尝试以 root 身份进行 ssh 时,我收到以下消息:
$ ssh -i "mykey" root@machine
Please login as the user "admin" rather than the user "root".
^C
Connection to machine closed.
Run Code Online (Sandbox Code Playgroud)
请注意^C
- 命令不会终止。
我可以毫无问题地登录admin
,并且我知道为什么这样做 - 但我不确定如何登录。
我的第一直觉是贝壳
admin@machine:~$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
Run Code Online (Sandbox Code Playgroud)
没有。我检查了 nologin 以防万一:
admin@machine:~$ /usr/sbin/nologin This account is currently not available.
Run Code Online (Sandbox Code Playgroud)
不同的消息。
使系统在登录时打印出消息的机制是什么?
btrfs ×4
block-device ×2
filesystems ×2
linux ×2
shell ×2
ssh ×2
amazon-ec2 ×1
aptitude ×1
aws ×1
bash ×1
cat ×1
cd-command ×1
dependencies ×1
directory ×1
encryption ×1
luks ×1
mount ×1
root ×1
security ×1
snapshot ×1
symlink ×1