因此,人们使用 telnet 编写服务器程序,用户只需在其中执行telnet server.com并将他们连接到服务器程序,然后为他们提供可以通过网络使用的文本程序(如 MUD)。这里有一些,例如:
http://www.telnet.org/htm/places.htm
我想编写一个这样的服务器程序,但我希望它具有防止 SSH 提供的窃听和 MITM 攻击的安全性。那么是否有可能编写一个程序,让用户可以在 linux 机器上执行此操作,ssh server.com或者可以ssh guest@server.com将其修补到与这些 telnet 服务器类似的文本程序中?
我想跟踪 ssh 用来输出此警告消息的系统调用:
> ssh root@abcde
The authenticity of host .. can't be established.
Run Code Online (Sandbox Code Playgroud)
如果消息被发送到 stderr 或 stdout,肯定会有一个系统调用跟踪显示 sshwrite()到 stderr/stdout。
然而,没有。
那么SSH是如何在终端上显示警告信息的呢?SSH 是否直接操作终端设备来显示消息,而不与 stderr/stdout 交互?
在回答另一个非常好的问题时,我做出了以下断言:
根据我对 POSIX 规范的阅读,从解析的角度来看,使用一个或另一个没有区别。
POSIX 指定&&||列表是复合命令,这意味着在执行组成的简单命令之前必须读入和解析整个列表。POSIX 还规定,如果一个命令跟在一个和另一个具有 0 退出状态的命令之后,则该命令不得扩展||OR。当您考虑到&&||保留字后面的命令很容易被另一个分组时,{ command || ( command ; list) ; }就会使&&||或 列出自己的复合命令的每个分支。
但是 POSIX 也以这种方式指定if...;then...;else...fi构造的每个分支都是它自己的复合命令:
if compound-list
then
compound-list
[elif compound-list
then
compound-list] ...
[else
compound-list]
fi
Run Code Online (Sandbox Code Playgroud)
执行
if复合列表;如果它的exit状态为零,则then复合列表将被执行并且命令将完成......
正是这个规范表明 athen...或else...保留字后面的字符串本身就是复合命令,而不仅仅是简单的命令,这意味着 shell 的解析器必须用命令和分隔符来表示它们才能正确操作。
所以基本上,then ' '出于同样的原因不起作用: …
我正在 Ubuntu 16.04 上尝试使用 Qemu 外部快照进行 KVM(因为它们太快了!),并进行以下设置:
head.qcow2符号链接始终指向顶部“head”qcow2 图像。这样我就不必不断更新虚拟机配置。(维尔什编辑)。base.qcow2我使用以下脚本拍摄快照(创建一个新的 qcow2 图像并将其设为头部)。该脚本仅在来宾未运行时执行。
#!/bin/bash
UNIX_TIMESTAMP=$(date +%s)
CURRENT_BACKING_FILE=`readlink head.qcow2`
NEW_HEAD_FILE="`pwd`/`echo $UNIX_TIMESTAMP`.qcow2"
# Create the new "head" disk image where all future changes are made.
sudo qemu-img create \
-f qcow2 \
-b $CURRENT_BACKING_FILE \
$NEW_HEAD_FILE
# Update the symlink
rm head.qcow2
ln -s $NEW_HEAD_FILE head.qcow2
Run Code Online (Sandbox Code Playgroud)
当 head.qcow2 指向 base.qcow2 时,这将正常工作,或者我运行脚本一次,因此只有一个支持文件。但是,如果存在一系列备份文件(例如,一个备份文件也有一个备份文件),那么我将收到以下错误:
error: Failed to start domain template-ubuntu-docker2
error: internal error: early end of file from …Run Code Online (Sandbox Code Playgroud) 我在 Windows 文件服务器上获得了一个帐户。(对我来说)非常奇怪的情况是
smbclient,更改到(深层)子目录或显示其内容/proc/mounts)但我无法更改为相同的路径或列出其内容。我明白了No such file or directory。我对较低级别的子目录既没有“显示内容”也没有“更改为”权限。这不应该是一个问题,它不是为了smbclient.
Windows 管理员已授予我的用户额外权限,以便我现在可以查看要点的内容。现在我也可以通过挂载到达更深层次的子目录。
我们尚未确定要在当前配置中工作所需的最少 Windows 权限集。但是,无论如何,问题必须出在 Linux 端。
smbclient和mount.cifs访问 Windows 共享的方式有什么区别?mount.cifs表现得像smbclient?我让 Windows 管理员重置了共享权限,以便我可以测试答案中的建议。不幸的是,问题消失了。和以前一样,我看不到共享的内容,但现在挂载可以访问深层子目录。很奇怪。
评论@intika:我打算为你的回答提供额外的赏金,但在我这样做的时候你出于某种原因删除了你的回答......
服务器 2016,SMB 3.1.1
4.5.16;不是域的成员
/etc/fstab: //fs-p01.dnsdomain/Data /data cifs credentials=/root/fs-p01.credentials 0 0smbclient //fs-p01.dnsdomain/Data -U username -W windowsdomain我只是意识到windowsdomain在smbclient命令中是不完整的。可能不相关,因为这有效。它只是name代替name.local. 但是,这是命令之间配置的差异。不幸的是,我无法检查是否mount可以使用错误的域,因为我无法将 Windows 服务器上的权限更改回其原始设置。我必须等待 Windows …
我只是在回答另一个问题在这里:-),因此一看-想看看在/proc/$PID/fd的ssh-agent,以找出它使用套接字。但我不能。我很惊讶地注意到大多数文件和目录都属于 root。ssh-agent作为我的用户运行(它的父进程也是如此)并且没有安装 SUID root。我无法找出 KDE 的确切启动位置。我好奇; 有人可以告诉我这里发生了什么吗?
或者这根本与用户无关,进程是否可以使用一些内核魔法/proc来向公众(甚至同一用户的其他进程)隐藏(大部分)他们的信息?
我刚刚检查了/proc/$PID/fd我所有的进程,并注意到这ssh-agent不是唯一具有这个奇怪属性的进程。其他的是一堆 Chrome 进程和kdesud(也没有 SUID 根二进制文件)。
我接受了实习面试,我得到了与这个相同的问题:http : //www.glassdoor.com/Interview/Which-2-letter-POSIX-command-is-different-from-all-the-others- QTN_498236.htm
答案是对的,是的cd(正如面试官告诉我的那样)。我对这一点很困惑。为什么cd不同?我跟面试官说不一样,因为可能不会被“shell”实现,但当时我不知道我在说什么。
操作系统:Linux Mint
的输出inxi -xG:
Graphics: Card: NVIDIA GF108 [GeForce GT 440] bus-ID: 02:00.0
X.Org: 1.13.0 drivers: vesa (unloaded: fbdev) Resolution:
800x600@0.0hz
GLX Renderer: Gallium 0.4 on llvmpipe (LLVM 3.3, 128 bits) GLX
Version: 2.1 Mesa 9.2.0 Direct Rendering: Yes
Run Code Online (Sandbox Code Playgroud)
打算翻转电脑的屏幕。以上有关当前显卡和操作系统的信息。
$ xrandr
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 320 x 400, current 800 x 600, maximum 800 x 600
default connected 800x600+0+0 0mm x 0mm
800x600 0.0*
640x480 60.0
640x400 0.0 …Run Code Online (Sandbox Code Playgroud) 我有一个程序试图在启动时连接到未知端口上的服务器。我需要找出程序访问哪个端口来启用 ssh 隧道。
我试过了,netstat但由于连接失败,我找不到任何有用的信息。
我使用foo &.
它输出类似:
[1] 16915
这是进程ID,我猜。如何将此数字存储到名为MY_PROCESS_ID(例如)的变量中?
然后我可以这样做:
kill $MY_PROCESS_ID
Run Code Online (Sandbox Code Playgroud)
并且我的进程 ID 将被杀死。
ssh ×3
linux ×2
security ×2
shell ×2
shell-script ×2
apparmor ×1
bash ×1
cd-command ×1
command ×1
command-line ×1
encryption ×1
kvm ×1
linux-kernel ×1
mount ×1
netstat ×1
nvidia ×1
permissions ×1
posix ×1
proc ×1
process ×1
qemu ×1
smb ×1
smbclient ×1
snapshot ×1
telnet ×1
terminal ×1
xrandr ×1