Я накрутив, вихід у .bashrc


27

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

Поки я намагався:

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

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

ОНОВЛЕННЯ

@ ring0

Я спробував вашу пропозицію, але не пощастило. Файл bashrc все ще працює першим.

Я також спробував увійти в інший обліковий запис і редагувати sudo .bashrc, але у мене немає привілеїв судо на цьому акаунті.

Я думаю, я зв’яжуся з адміністратором.

EDIT

@shellholic

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


2
darwinawards.com у вас повинен бути (тимчасовий) доступ як користувач, який може перезаписати ваш .bashrc файл або змінити стандартну оболонку на щось інше. "Запитайте свого системного адміністратора", як каже MS.

2
man 8 sshdговорить, що це 9. Runs user's shell or command.як дев'ятий крок ...: - /

1
scp також перестане працювати, тому що оболонка все ще відкривається, і .bashrc телефонує
Олександр Левчук

FYI, тому що більшість цих пропозицій не працює в тому, що ssh виконує будь-яку команду, передаючи її як аргумент в оболонку користувача. Шукати execve в session.c. Немає можливості змінювати / додавати / видаляти аргументи цього виклику оболонки користувача.
Марк Вагнер

Відповіді:


37

ви можете спробувати перервати (ctrl + C) до того, як .bashrcбуде виконана частина виходу .

Я спробував, додавши наступне у верхній частині тестуючого bashrc, це працює, це лише питання часу. У моєму випадку дуже просто:

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

8
+1, оскільки це, мабуть, єдине рішення, яке не потребує допомоги системного адміністратора. Однак, щоб мати правильний час, потрібна велика удача (хоч ssh -v може трохи допомогти).
JooMing

Насправді ctrl + C справді спрацював. Навіть без сну. Я помістив "вихід" у свій bashrc і зміг відновитись за допомогою швидкого ctrl + C приблизно через 4 спроби. Будь-ласка, змініть відповідь, щоб я міг змінити "-1" на "+1".
Олександр Левчук

@ Олександр Левчук зробив
митець

4
Я дуже ціную тут поєднання патетично смішних низькотехнологічних та брутальних результатів.
unixtippse

1
Я сміюся, як божевільний, той поспіх, коли нарешті спрацює. Дякую @JooMing, я спробував усі методи звідси serverfault.com/questions/94503/… навіть той, який натискає Ctrl + C, але він працював лише після додавання параметра -v!
mxmlnkn

12

Мені вдалося зіпсувати мій файл .bashrc і на новому кластері, до якого я отримав пробний доступ. Не бажаючи здаватися нубом, останнє, що я хотів зробити, - це попросити допомоги у адміністраторів, і я не міг змусити своєчасно ^ + С працювати.
Однак, що працювало, було надіслати команду 'rm' як остаточний аргумент до ssh. тобто

ssh -tv user@host rm .bashrc

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


2
ssh -tv user@home mv .bashrc .bashrc-oldпрацював на мене
Командир коду

3

Якщо ви можете увійти як інший користувач, спробуйте це:

su user -s /bin/sh

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


1
ви можете спробувати різні, не на основі шкаралупи: kshабоcsh
Хуберт Каріо

3

Якщо я пригадую такий поганий досвід, як у мене був такий, ssh, scp, sftp, здається, запускають файли ініціалізації.

Моя пропозиція - використовувати простий FTP, а потім видалити або перейменувати поганий файл у командному рядку FTP після входу. Я припускаю, що ваша система дозволить вам отримати доступ до FTP. У такому випадку обов’язково змініть свій пароль (надійно), коли закінчите ремонт.


Filezilla для цього прекрасно працював. Потрібно просто випадаюче меню "Сервер" та вибрати налаштування "Примусити показ прихованих файлів".
Danny G

1

З 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та повернути його на місце


0

Підключіться через SCP або SFTP і відредагуйте / перейменуйте / видаліть свій .bashrc файл таким чином. Редагувати - D'oh, я бачу, ви сказали, що ви спробували це. Ну добре.


0

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


1
Точний дублікат найвідповідальнішої відповіді тут
pauska

0

Я знайшов це робочим.

Перервіть завантажувач grub, натиснувши e ... знову натисніть e для введення рядків завантаження grub, знову натисніть e для редагування лінії ядра

перейти до кінця рядка;

додати init = / bin / bash в кінці рядка,

увійти для повернення, b до завантаження,

він відкриє bash оболонку, відкриє vim /root/.bashrc і відредагує відповідно. Вийти і тепер ви зможете увійти


0

Якщо ви використовуєте 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

Примітка: за замовчуванням пароль "бродячий"

Ці статті допомогли мені:


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