Назад | Перейти на главную страницу

Можно ли использовать ssh или rsync в системе, файловая система которой перемонтирована в режим только для чтения?

Мне нужно войти в систему, которая перешла в состояние только для чтения. Я могу пинговать его нормально, но я больше не могу подключиться по ssh. Есть ли какой-то специальный флаг / параметр командной строки, который я могу передать ssh, который позволяет мне войти в систему, которая перешла в режим только для чтения?

Забыл добавить точную ошибку подключения:

OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to 192.168.0.4 [192.168.0.4] port 22.
debug1: Connection established.
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_exchange_identification: Connection closed by remote host

Я должен добавить, что ping довольно надежен для этого окна:

ping 192.168.0.4
PING 192.168.0.4 (192.168.0.4) 56(84) bytes of data.
64 bytes from 192.168.0.4: icmp_seq=1 ttl=64 time=0.662 ms
64 bytes from 192.168.0.4: icmp_seq=2 ttl=64 time=0.088 ms
64 bytes from 192.168.0.4: icmp_seq=3 ttl=64 time=0.089 ms

Короткий ответ заключается в том, что ваш 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] для создания дочернего процесса. Дочерний процесс обрабатывает соединение, в то время как родительский продолжает прослушивать дальнейшие соединения. Если форк не удастся, сервер закроет соединение, ничего не отправив клиенту.

Вы можете войти в систему, вызвав сеанс оболочки без входа. Например, вы можете передать команду ssh после успешной аутентификации:

ssh user@host bash --noprofile --norc

Конечно, это использует bash как оболочка. Разным оболочкам потребуются соответствующие параметры, чтобы не срабатывать wtmp/utmp обновления, а также не пытаться делать то, что может привести к сбою и преждевременному выходу из системы (т.е. до того, как оболочка завершит свои обычные задачи при обычном открытии сеанса входа в систему).

Предупреждение: оболочка будет скорее (очень!) ограничено, обычно без подсказок и прочих излишеств. Но вам достаточно сесть в машину и проверить, что не так.

Отредактировано для добавления: в зависимости от обстоятельств вашего хоста может потребоваться указать полный путь, например /bin/bash как команду для выполнения после успешной аутентификации.