是否可以通过 ssh 或 rsync 进入文件系统已重新以只读方式安装的系统?

是否可以通过 ssh 或 rsync 进入文件系统已重新以只读方式安装的系统?

我需要登录进入只读状态的系统。我可以正常 ping 它,但我无法再通过 ssh 登录。是否有一些特殊的命令行标志/参数可以传递给 ssh,让我可以登录进入只读模式的系统?

忘记添加确切的连接错误:

OpenSSH_5.3p1,OpenSSL 1.0.1e-fips 2013 年 2 月 11 日
debug1:读取配置数据 /etc/ssh/ssh_config
debug1:应用选项 *
调试2:ssh_connect:needpriv 0
debug1:连接到192.168.0.4[192.168.0.4]端口22。
debug1:连接已建立。
debug1:身份文件/home/username/.ssh/identity type -1
debug1:身份文件/home/username/.ssh/identity-cert type -1
debug1:身份文件/home/username/.ssh/id_rsa 类型-1
debug1:身份文件/home/username/.ssh/id_rsa-cert 类型-1
debug1:身份文件/home/username/.ssh/id_dsa 类型-1
debug1:身份文件/home/username/.ssh/id_dsa-cert 类型 -1
ssh_exchange_identification:远程主机关闭连接

我应该补充一点,ping 对于这个盒子来说非常强大:

ping 192.168.0.4
PING 192.168.0.4 (192.168.0.4) 56(84)字节数据。
来自 192.168.0.4 的 64 字节:icmp_seq=1 ttl=64 时间=0.662 毫秒
来自 192.168.0.4 的 64 字节:icmp_seq=2 ttl=64 时间=0.088 毫秒
来自 192.168.0.4 的 64 字节:icmp_seq=3 ttl=64 时间=0.089 毫秒

答案1

ssh您可以通过调用无需登录的 shell 会话来登录。例如,您可以在成功验证后传递命令:

ssh user@host bash --noprofile --norc

当然,这使用bash作为 shell。不同的 shell 将需要适当的参数,以便不触发wtmp/utmp更新,以及不尝试执行可能失败并提前注销的操作(IE,在 shell 通常打开登录会话时完成其正常任务之前)。

需要注意的是:外壳将会相当(非常!) 有限,​​通常没有提示和其他花哨的东西。但这足以让您进入机器并检查出了什么问题。

编辑以添加:根据您的主机的情况,可能需要指定完整路径,例如/bin/bash作为成功验证后执行的命令。

答案2

简短的回答是,您的 SSH 服务器可能由于您描述的系统问题而无法运行。我认为客户端无法采取其他任何措施。

我将分解您的调试跟踪:

debug1: Connecting to 192.168.0.4 [192.168.0.4] port 22.
debug1: Connection established.

客户端已与该地址和端口建立连接。这意味着sshd服务器上的进程仍在运行。

debug1: identity file /home/username/.ssh/identity type -1
debug1: identity file /home/username/.ssh/identity-cert type -1
debug1: identity file /home/username/.ssh/id_rsa type -1
debug1: identity file /home/username/.ssh/id_rsa-cert type -1
debug1: identity file /home/username/.ssh/id_dsa type -1
debug1: identity file /home/username/.ssh/id_dsa-cert type -1

您的本地 ssh 客户端查找了这些密钥文件,但没有找到。这些都是它通常会查找的默认密钥文件名。只有当您期望其中一个文件存在时,这才会成为问题。它们在这里也不太重要,因为客户端从来没有机会进行身份验证。

ssh_exchange_identification: Connection closed by remote host

远程服务器关闭了 TCP 连接。此特定消息表示服务器“正常”关闭了连接。如果服务器崩溃,您会看到一条不同的消息,提示“对等方重置连接”。

通常,SSH 服务器首先会发送其软件版本字符串。如果这里发生这种情况,您会在调试跟踪中看到以下内容:

...
debug1: identity file /home/foo/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1.1
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1.1 pat OpenSSH*

在关闭连接之前,服务器甚至还没有完成这么远。

如果服务器运行正常,您看到的情况通常的解释是,服务器拒绝客户端,原因是TCP 包装器。但就您而言,系统状态的某些方面可能阻碍了sshd正常工作。例如,在接受连接后,服务器将立即调用[fork()][2]以创建子进程。子进程处理连接,而父进程继续监听进一步的连接。如果分叉失败,则服务器将关闭连接而不向客户端发送任何内容。

相关内容