Вопрос: Вход без запуска bash_profile или bashrc


Итак, скажем, что-то опечаталось в их .bashrc что не позволяет ему (или ей) войти в систему через ssh (т. е. вход ssh выходит из-за ошибки в файле). Есть ли способ, чтобы этот человек мог войти в систему без его выполнения (или .bashrc поскольку один запускает другой) или иным образом удаляет / переименовывает / отменяет действие файла?

Предположим, у вас нет физического доступа к машине, и это единственная учетная запись пользователя с возможностью входа в ssh.

Для справки: .bash_profile включает .bashrc:

[[ -f ~/.bashrc ]] && . ~/.bashrc

Изменить: все, что я пробовал:

ssh user@host "rm ~/.bashrc"

scp nothing user@host:/RAID/home/tom/.bashrc

ssh user@host  "/bin/bash --norc"

Все дают ошибку:

/RAID/home/tom/.bashrc: line 16: /usr/local/bin/file: No such file or directory
/RAID/home/tom/.bashrc: line 16: exec: /usr/local/bin/file: cannot execute: No such file or directory

62
2017-12-15 12:03


Источник


Ваша команда scp не будет работать, поскольку scp также будет читать .bashrc при подключении. Чтобы избежать проблемы В будущем вы можете добавить что-то вроде [ -z "$PS1" ] && return в начале ./bashrc. Таким образом, scp перестанет анализировать .bashrc после первой строки, и вы сможете перезаписать его в случае чрезвычайной ситуации. - dalloliogm


Ответы:


Я думаю, что ваши единственные варианты:

  • ssh в качестве другого пользователя и su для вашей учетной записи;

  • используйте что-то вроде ftp или smbclient, если соответствующие службы включены на хосте;

  • найти открытую уязвимость в открытой сетевой службе и использовать ее :).

  • попросите администратора исправить проблему.


18
2017-12-15 14:32



«Предположим, у вас нет физического доступа к машине, и это единственная учетная запись пользователя с возможностью входа в ssh». - Dennis Williamson
Я иду по этому пути. Я опубликую решение после того, как найду его. К счастью, у меня есть несколько атак атаки. - Tom Ritter
использовал Filezilla для SFTP на моем сервере, и он исправил меня. Большое спасибо, ты спас меня. У меня было условие «выхода 1» в моем .bash_profile случайно, и это меня закрыло. - djangofan


ssh -t имя_пользователя @ hostname / bin / sh работает для меня.


89
2017-11-12 14:22



Это работает хорошо - просто и предоставляет оболочку, которую вы можете использовать для устранения проблемы. - MT.
Ты просто спас мне жизнь. Благодарю. - Leo
Попытка сделать это с помощью приложения Secure Shell в Google Chrome (chrome.google.com/webstore/detail/secure-shell/...), но не может понять, как / где поставить аргументы командной строки. Какие-нибудь советы? - Benj
Это не работает для меня (хотя это должно соответствовать странице руководства). Локальный хост запускает ubuntu 14.04.1, а на удаленном хосте - ubuntu 12.04.5. Я не могу rsync, потому что моя оболочка для входа - tcsh, а на удаленном узле она печатает мусор (tcsh: Нет такого файла или каталога tcsh: Попытка начать с «/ u / levy» - что мне говорят, это потому, что каталог установлен NSF). Я думал, что разрешу проблему в обход оболочки входа, но это не сработает. - Silvio Levy
Если ваша оболочка по умолчанию - csh / tcsh, она будет всегда отправьте свой .cshrc/.tcshrc даже для неинтерактивных оболочек. - Brian Vandenberg


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


23
2018-02-18 22:12



Я был скептически, но на самом деле это работает ... - rmobis
Это гений! - user1747134
На самом деле работает ... спасибо! Другие методы никогда не работали для меня. - Zzzach...
на mac с только .bash_profile, это сработало для меня :) - AnneTheAgile
OMG, я думал, что искал весь интернет, тогда я решил попробовать это, и это единственный способ, который работает для меня! Благодаря! - Jiahao


Я использовал опубликованный CVE для выполнения команды как root через веб-интерфейс в установленном мной программном обеспечении мониторинга сети. "rm /RAID/home/tom/.bashrc"

Тогда я мог бы войти и svn вернуть изменения, которые я сделал.


19
2017-12-19 17:54



Это одновременно и удивительно, и неудачно. - MikeyB
@TomRitter: Пожалуйста, укажите, что ᴄᴠᴇ ссылка. - user2284570
Это было в ооолдованной версии кактусов, поэтому, если вы не используете 8-летнее программное обеспечение, я не думаю, что это вам поможет. И если вы используете 8-летнее программное обеспечение, я не могу вам помочь. ;) - Tom Ritter


Вам необходимо: a) начать удар без sourceлибо ~/.bashrc или ~/.bash_profile и б), так как такая оболочка не будет полной оболочкой входа / не имеет TTY прилагается, сила SSH приложить TTY:

ssh -t user@host bash --norc --noprofile

8
2018-02-17 12:51





Не повезло тебе.

Все команды ssh запускают вашу оболочку входа. ssh $COMMAND работает $SHELL -c $COMMAND, scp работает $SHELL -c /path/to/sftp-server, равнина ssh просто запускает вашу оболочку.


5
2017-12-15 13:29



Это справедливо и для sftp - даже SSH-подсистемы, по-видимому, выполняются изнутри оболочки. - lxgr
По моему опыту, вы правы, хотя на странице ssh man сказано: «Если задана команда, она выполняется на удаленном хосте вместо оболочки входа». Тем не менее, плакат смог решить проблему, используя ответ с наивысшим рейтингом (ssh hostname / bin / sh). Что дает? - Silvio Levy
@ Сильвио, ответ OP заключается в том, что он использовал эксплойт, не связанный с SSH. - Tobu
Правильно. Кто-то сообщил об успехах с самым высоким рейтингом, и я поспешно предположил, что это OP. Я бы хотел, чтобы это сработало - у меня такая же ситуация, хотя это просто раздражает, а не калечит. (См. Мой комментарий в соответствии с самым высоким рейтингом выше). - Silvio Levy


Ни один из приведенных выше ответов не может обойти оболочку входа ssh. Вы можете передать полную командную строку, и поэтому она запускает удаленную оболочку для обработки команды и установки рабочей среды для этой команды. Для этого нужны раковины, и это путь Unix. У вас возникли бы проблемы с совместимостью, если вы попытались запустить что-то без оболочки. Аналогично, попытка управления C должна делать то же самое, что вызывать exit, который является поведением, которое вы пытаетесь избежать. Если bash продолжает свою ошибку. Почему люди продолжают говорить, что на странице руководства написано что-то другое, нужно процитировать его, потому что ничего не говорится об этом на моей странице.

Кроме того, в большинстве Linux-систем указание / bin / sh НЕ НИЧЕГО, так как это просто символическая ссылка на bash!

Хотите проверить? Добавьте к вам инструкции «echo» .bashrc и .profile и посмотрите, какая из них выполняется. Я сделал. Вот результаты.

ssh user@host выполнит .bash_profile ssh user@host /bin/bash будет исполнять .bashrc, но он считает его неинтерактивным (без подсказки). ssh -t user@host /bin/bash Выполняет .bashrc дважды ... один раз при входе в систему, один раз для переданной команды, поэтому указание любой оболочки всегда будет работать первым. ssh -T user@host то же самое, что вообще не указывать -T или -t.

Теперь, если вы заметили, в моей системе не работают оба файла, только один или другой. Но исходный плакат имеет строку в .bash_profile, запущенную .bashrc, поэтому .bashrc всегда будет запускаться независимо от того, что. Не стоит ставить эту линию! Если бы эта линия не существовала, у вас не было бы проблем.

Вам нужно найти другой способ или найти администратора. Для этого нужны админы.


4
2017-07-25 06:52



Некоторые хорошие моменты; не исполняемый файл не передается как команда может помочь, как вы объяснить, но на несколько спорный вопрос: если /bin/sh  сделал сначала выполнить его, это бы помощь, потому что Баш не нагрузка ~/.bashrc при вызове sh, Этот ответ является надмножеством вашего другого ответа, поэтому, пожалуйста, удалите другой. - mklement


Что-то вроде:

ssh host "/bin/bash --norc"

который, похоже, работает, но обратите внимание, что PS1 не установлен, поэтому вы будете вводить команды без подсказки.

Это имеет то преимущество, что оно не разрушительно.


3
2017-12-15 12:20



Это не работает, он сначала попытался войти в систему, но не смог войти в систему и поэтому не может запустить bash --norc - Tom Ritter


пытаться

echo ^C | ssh <hostname> ' rm .bashrc'

^ C есть управление-v, то c


1
2018-02-21 18:18



Это ctrl-v и ctrl-c в моей системе. Спасибо, в любом случае! :) - mzuther


ssh -t user@host "bash --norc --noprofile -c '/bin/rm .bashrc'"

1
2018-04-09 17:16



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


Вы можете попробовать перезаписать .bash_profile с пустым файлом, используя scp команда. Из того, что я искал в google, scp использует неинтерактивный вход, который не читается .bash_profile,


0
2017-12-15 12:22



Если я (гипотетически) не помню структуру каталогов неправильно, и это не дает мне ошибку, это не работает - scp также запускает файл (ы). - Tom Ritter
Дело в том, что люди не понимают, что scp не является чем-то особенным; это просто еще одна команда, выполняемая над ssh, что означает почти все, что происходит для интерактивного сеанса ssh, с помощью scp. - larsks
как насчет sftp, afaik его подсистема ssh. - allo