Я облажался, выход в.bashrc

Я положил "выход" в моем файле.bashrc. У меня нет физического доступа к машине, поэтому для подключения к ней я использую ssh. У меня нет привилегий root. Каждый раз, когда я подключаюсь к серверу, соединение автоматически закрывается.

Пока что я пробовал:

  • Перезапись.bashrc с помощью scp и sftp. Соединение закрывается, прежде чем я могу что-либо сделать.
  • Использование нескольких различных программ GUI для доступа к SSH (соединение закрывается)
  • Перезаписываем файл с помощью ftp. (не могу использовать ftp)
  • С моего домашнего компьютера
    • $ ssh host "bash --noprofile --norc" (соединение закрывается)
    • $ ssh host "mv.bashrc bashrc_temp" (соединение закрывается)
    • $ ssh host "rm.bashrc" (тоже самое)
    • $ ssh host -t (соединение закрывается)

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

ОБНОВИТЬ

@ ring0

Я попробовал ваше предложение, но не повезло. Файл bashrc все еще выполняется первым.

Еще я попробовал войти в систему с другой учетной записью и отредактировать sudo.bashrc, но у меня нет привилегий sudo для этой учетной записи.

Я думаю, я свяжусь с админом.

РЕДАКТИРОВАТЬ

@shellholic

Я не могу в это поверить, но этот подход сработал! Несмотря на то, что "выход" происходит в первых нескольких строках (состоящих только из нескольких блоков if и операторов экспорта) в файле.bashrc, мне все же удалось успешно прервать его с помощью Ctrl-c за двадцать попыток (это заняло около 3 минут). Я удалил оскорбительную строку в.bashrc и все снова в рабочем состоянии.

10 ответов

Решение

Вы можете попытаться прервать (Ctrl+C) перед выходной частью вашего .bashrc выполнен.

Я попытался добавить следующее в начало bashrc тестера, это работает, это просто вопрос времени. Очень легко в моем случае:

sleep 3
echo "Too late... bye"
exit 0

Мне также удалось испортить мой файл.bashrc на новом кластере, к которому мне предоставили пробный доступ. Не желая казаться нубом, последнее, что я хотел сделать, это попросить помощи у администраторов, и я не мог заставить работать своевременную ^+C.
Однако сработало то, что команда sm отправила команду 'rm' в качестве последнего аргумента. т.е.

ssh -tv user@host rm .bashrc

Я не мог заставить работать команду 'mv' (пробовал раньше без -t), поэтому я думаю, что опция -t должна была это сделать, но вы можете проверить это, если хотите. Теперь я извлек из файла.bashrc~ (сделанного vim) все, кроме сомнительной строки, и все в мире правильно! =D

Если я вспоминаю некоторые неудачные события, которые у меня были, вот так, похоже, что ssh, scp, sftp запускают файлы инициализации.

Я предлагаю использовать простой FTP, а затем удалить или переименовать плохой файл в командной строке FTP после входа в систему. Я предполагаю, что ваша система предоставит вам доступ по FTP. В таком случае обязательно смените свой пароль (надежно) после завершения ремонта.

Если вы можете войти как другой пользователь, попробуйте это:

su user -s /bin/sh

Вам понадобится ваш пароль, конечно.

От man ssh (для OpenSSH_5.6p1 по крайней мере, не уверен, когда это было добавлено),

~/.ssh/rc
        Commands in this file are executed by ssh when the user logs in, just
        before the user's shell (or command) is started.  See the sshd(8) manual
        page for more information.

... что означает, что вы можете создать ~/.ssh/rc содержащий следующее:

mv ~/.bashrc ~/bak.bashrc

Тогда когда ты ssh в, проблемный bashrc будет удален, прежде чем ваша оболочка входа в систему - вы можете, очевидно, исправить bak.bashrc и верните его на место

Несколько предложений, которые работали для меня из этой ветки Reddit:

ssh you@the.box /bin/bash --noprofile --norc
ssh -t jacksgt@example.com vi ./.bashrc

Если вы используете Homestead Vagrant...

Вот как я вытащил себя из этого рассола.

(Использование Git Bash в Windows 10)

cd ../Homestead/
mv ~/.ssh/known_hosts ~/.ssh/known_hosts_OLD
ssh vagrant@127.0.0.1 -p 2222 mv ./.bashrc ./.bashrc_OLD

Примечание: пароль по умолчанию "vagrant"

Эти статьи помогли мне:

Подключитесь через SCP или SFTP и отредактируйте / переименуйте / удалите файл.bashrc таким образом. Edit - D'oh, я вижу, вы сказали, что пытались это. Ну что ж.

У меня была такая же проблема, и я как-то смог ее решить. Я использовал ssh для доступа к системе, нажимал и удерживал Ctrl+c, как только вошел в систему. Затем ~/.bashrc не был прочитан, и я смог изменить его.

Я нашел это работает.

Чтобы прервать загрузчик grub, нажмите e... снова нажмите e, чтобы ввести строки загрузки grub, снова нажмите e, чтобы отредактировать строку ядра,

перейти к концу строки;

добавить init=/bin/bash в конце строки,

введите, чтобы вернуться, б, чтобы загрузить,

он откроет оболочку bash, откроет vim /root/.bashrc и отредактирует соответственно. выйти, и теперь вы сможете войти

Другие вопросы по тегам