Увійти без запуску bash_profile або bashrc


75

Тож скажімо, що хтось набрав щось у своєму документі, .bashrcщо заважає йому (або їй) входити через ssh(тобто вхід ssh виходить через помилку у файлі). Чи є спосіб, щоб ця людина могла увійти, не виконуючи її (або .bashrcоскільки одна працює іншою), або іншим чином видалити / перейменувати / визнати недійсним файл?

Припустимо, у вас немає фізичного доступу до машини, і це єдиний обліковий запис користувача, який має можливість ввійти в систему.

Довідково: .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

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

Відповіді:


24

Я думаю, що ваші єдині варіанти:

  • ssh в іншому користувачеві, і ваш рахунок;

  • використовувати щось на зразок ftp або smbclient, якщо відповідні послуги включені на хості;

  • знайти відкриту вразливість у службі відкритої мережі та використати її :).

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


4
"Припустимо, у вас немає фізичного доступу до машини, і це єдиний обліковий запис користувача, який має можливість ввійти в систему."
Денніс Вільямсон

Я йду цим маршрутом. Я опублікую рішення після того, як його знайду. На щастя, у мене є кілька авеню атаки.
Том Ріттер

1
використовував Filezilla для SFTP на своєму сервері, і це мене виправило. Велике спасибі, ти врятував мене. У мене .bash_profile у моєму .bash_profile випадково випало, і це мене розігнало.
djangofan

117

ssh -t username@hostname /bin/sh працює для мене.


Це добре - простий і надає оболонку, яку ви можете використовувати для усунення проблеми.
MT.

1
Намагаючись зробити це за допомогою програми Secure Shell в Google Chrome ( chrome.google.com/webstore/detail/secure-shell/… ), але не можу зрозуміти, як і куди розмістити аргументи командного рядка. Якісь поради?
Бендж

2
Це не працює для мене (хоча це має бути відповідно до сторінки man). Локальний хост працює ubuntu 14.04.1, а на віддаленому хості - ubuntu 12.04.5. Я не можу rsync, тому що моя оболонка входу tcsh, а на віддаленому хості вона друкує сміття (tcsh: Немає такого файлу чи каталогу tcsh: Спроба почати з "/ u / levy" - що мені сказали, тому що каталог встановлений NSF). Я думав, що вирішу проблему, минаючи оболонку входу, але це не працює.
Сільвіо Леві

2
Якщо оболонка за замовчуванням - csh / tcsh, вона завжди буде джерелом вашого .cshrc/ .tcshrcнавіть для неінтерактивних оболонок.
Брайан Ванденберг

Я сиджу тут, сміюсь від дупи над власною дурістю, що дійшла до цього моменту. Ваше рішення спрацювало чудово.
Дуже

36

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


11
Я був скептичним, але це насправді працює ...
rmobis

Це геній!
користувач1747134

Насправді працює ... дякую! Інші методи для мене ніколи не працювали.
Zzzach ...

на mac із лише .bash_profile, це працювало для мене :)
AnneTheAgile

OMG, я думав, що шукав весь Інтернет, тоді я вирішив спробувати це, і це єдиний спосіб, який працює для мене! Дякую!
Jiahao Cai

21

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

Тоді я міг увійти та svn відновити зміни, які я вніс.


11
Це одночасно і дивовижно, і неприємно.
MikeyB

1
@TomRitter: Будь ласка, надайте цю ᴄᴠᴇ посилання.
користувач2284570

1
Це було у старій версії кактусів, тому, якщо ви не працюєте з 8-річним програмним забезпеченням, я не думаю, що це вам допоможе. І якщо ви використовуєте 8-річне програмне забезпечення, я не можу вам допомогти. ;)
Том Ріттер

15

Вам потрібно: a) запустити bash без source'ing або ~/.bashrcабо ~/.bash_profileі b), оскільки така оболонка не була б оболонкою з повним входом / не мала доданих tty , примушуйте ssh приєднувати tty :

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

3
Це працює, але зауважте, що у вас не буде звичного підказки, а лише порожній екран. спробуйте зробити, lsщоб переконати себе, що ви в :). Також зауважте, що цей dumbтермін використовуватиме термін, тому для мене нано не працює
Ciprian Tomoiagă

7

Вам не пощастило.

Усі команди ssh виконують вашу оболонку входу. ssh $COMMANDбігає $SHELL -c $COMMAND, scpбігає $SHELL -c /path/to/sftp-server, просто sshпросто запускає вашу оболонку.


3
Це справедливо і для sftp - навіть SSH підсистеми, мабуть, виконуються з оболонки.
lxgr

На мій досвід ви правильні, навіть незважаючи на те, що на сторінці ssh man написано "Якщо вказана команда, вона виконується на віддаленому хості замість оболонки входу". Однак плакат зміг вирішити проблему, використовуючи відповідь найвищого рейтингу (ssh ім'я хоста / бін / ш). Що дає?
Сільвіо Леві

@Silvio, відповідь ОП: він використовував подвиг, не пов'язаний з SSH.
Тобу

Правильно. Хтось повідомив про успіх з найвищою оцінкою, і я поспішно припустив, що це ОП. Я хотів би, щоб це спрацювало - у мене схожа ситуація, хоча це просто дратує, не калічить. (Дивіться мій коментар під найвищою оцінкою відповіді вище.)
Сільвіо Леві

6

Жоден із наведених відповідей не може обійти оболонку входу з ssh. Ви можете передати повний командний рядок, і так він запускає віддалену оболонку для обробки команди та встановлення робочого середовища для команди. Саме для цього потрібні снаряди, і це спосіб Unix. У вас виникли б усілякі проблеми сумісності, якби ви намагалися запустити щось без оболонки. Так само, намагаючись керувати-C слід робити те саме, що викликати вихід, що є поведінкою, якої ти намагаєшся уникати. Якщо 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 завжди запускається незалежно від того. Не повинен був туди прокладати цю лінію! Якби цієї лінії не існувало, у вас не виникло б проблеми.

Вам потрібно буде знайти інший спосіб або знайти адміністратора. Це те, для чого призначені адміністратори.


Деякі хороші моменти; не виконується файл не передається як команда може допомогти, як ви пояснити, але на кілька спірне питання: якщо /bin/sh дійсно отримати , щоб виконати перший, він буде допомагати, тому що Bash НЕ спрацював , ~/.bashrcколи викликається як sh. Ця відповідь є сукупністю вашої іншої відповіді, тому видаліть іншу.
mklement

3

Щось на зразок:

ssh host "/bin/bash --norc"

який, здається, працює, але зауважте, що PS1 не встановлений, тому ви будете набирати команди без підказки.

Це має перевагу в тому, що вона не руйнує.


1
Це не працює, спершу спробував вдалий логін, але не може увійти, і тому не може запустити bash --norc
Том Ріттер


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

Це працювало для мене в дуже обмеженому середовищі, коли нічого не буде. Мені довелося вказати повний шлях до .bashrc.
zbeekman

1

Mashing ctrl-C працює до тих пір, поки ви можете отримати ctrl-C перед виходом .bashrc. На жаль, це може бути важко зробити, якщо exitрано в .bashrc.

Ви можете якнайшвидше поставити ctrl-C, перенісши його безпосередньо до ssh:

{ echo ^C; cat /dev/tty; } | ssh -tt user@host

Зауважте, що ^Cвводиться як ctrl-V, а потім ctrl-C.

Це передає єдиний ctrl-C з подальшим введенням з керуючого терміналу, в той час як -ttпримушує виділити psuedo-термінал. Все сказане про це дає вам (дещо неправильну) оболонку на віддаленій машині, обминаючи якомога більше .bashrc.


0

Ви можете спробувати замінити .bash_profileпорожній файл за допомогою scpкоманди. З того, що я googled, scp використовує неінтерактивний логін, який не читається .bash_profile.


Якщо я (гіпотетично) пам’ятаю структуру каталогу неправильно і це не дає мені помилок, це не працює - scp також запускає файли (файли).
Том Ріттер

1
Те, що люди не усвідомлюють, це те, що scp - це не щось особливе; це просто ще одна команда, запущена над ssh - це означає, що майже все, що відбувається під час інтерактивного сеансу ssh, також задовольняє scp.
larsks

що щодо sftp, afaik - це його підсистема ssh.
алло

0

Ви також можете просто видалити файл bashrc:

ssh <hostname> rm ~/.bashrc

Проблема полягає у файлі .bash_profile, а не у bashrc.
Лоран Етьембл

1
Це не працює - спершу намагається скористатися оболонкою і вийти з ладу.
Том Ріттер

0

Якщо система налаштована нормально, .bash_profile не буде запускатися для неінтерактивної оболонки (наприклад, виконання команди).

Оскільки ви заявляєте, що проблема полягає у файлі .bash_profile, спробуйте перемістити її з шляху:

ssh user@host "mv ~/.bash_profile ~/.bash_profile_broken"

Я не думав, яким способом пов’язані файли - .bash_profile включає .bashrc = (я додав більше інформації.
Том Ріттер

1
Але те, що пропонує Lockie - що підтверджується сторінкою bash man - це те, що неінтерактивна оболонка не буде працювати ні .bashrc, ні .bash_profile. Однак, навіть коли ви передаєте команди в командному рядку ssh (як у цьому прикладі), bash все ще запускається як "інтерактивна" оболонка, а це означає, що він буде читати ваш .bashrc файл. Тож гарна ідея, але, на жаль, ssh не співпрацює.
larsks

0

UH = 'користувач @ хост'; ssh $ UH 'mv ~ / .bashrc ~ / letmein'; ssh $ UH

Будь ласка, не вирізайте та не запустіть, не змініть, userа hostпотім відредагуйте letmeinта збережіть як.bashrc


0

Зверніть увагу на user60069, він працював на мене, але я використовую специфічний для оболонки файл запуску .bashrc, тому вхід з / bin / sh працював на мене.

Однак, якщо ви перебуваєте в ситуації "немає такої удачі", я пропоную це рішення, засноване на рішеннях user60069 та Dennis W:

ssh -t you@host  /bin/bash --noprofile  --norc

Денніс W запропонував варіант --norc, який хтось сказав, що не працює для них.

Запустіть "man bash" або "man (ваша оболонка)" для опцій відключення запуску файлів. Потрібно використовувати лише хибну оболонку протягом часу, необхідного для усунення проблеми.


0

Інший спосіб входу на сервер - це без профілю, будь ласка, знайдіть команду нижче
ssh -t user@host bash --noprofile

Для AWS з використанням файлу pem та жодного іншого користувача
ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile

Сподіваюся, це допомагає!


-1

З пропозицій та відповідей, наведених вище, я б сказав, що це не файли .bashrc або .bash_profile. Також в ssh manpage зазначено, що якщо ви вкажете команду, яку потрібно виконати, файли вашого профілю не будуть читатися.

Я б запропонував спробувати виконати іншу оболонку входу (ksh? Csh? Sh?) З абсолютного шляху; також майте на увазі, що це може бути зовсім інша проблема (квота? виконання та читання дозволу у вашому домашньому каталозі?), тож сторонній підхід був би кращим. Чи можете ви попросити іншого користувача зробити результат ls -la $YOUR_HOME_DIRі надіслати вам повідомлення електронною поштою?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.