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

Войти без запуска 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

ssh -t username@hostname /bin/sh работает для меня.

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

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

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

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

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

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

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

Затем я мог войти в систему и svn отменить сделанные мной изменения.

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

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

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

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

Ни один из приведенных выше ответов не может обойти оболочку входа в ssh. Вы можете передать полную командную строку, чтобы она запускала удаленную оболочку для обработки команды и задания рабочей среды для команды. Вот для чего нужны оболочки, и это способ Unix. Если вы попытаетесь запустить что-то без оболочки, у вас будут всевозможные проблемы совместимости. Точно так же попытка Control-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 всегда будет запускаться, несмотря ни на что. Не надо было там ставить эту строчку! Если бы этой строки не было, у вас не было бы проблем.

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

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

ssh host "/bin/bash --norc"

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

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

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

пытаться

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

^ C есть control-v, затем c

Затирание 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 принудительно выделяет псевдо-терминал. Все это дает вам (несколько уродливую) оболочку на удаленном компьютере, минуя как можно большую часть .bashrc.

Слава пользователю 60069, у меня это сработало, но я использую файл запуска .bashrc, специфичный для оболочки, поэтому вход в систему с / bin / sh у меня сработал.

Однако, если вам не повезло, я предлагаю это решение, основанное на решениях user60069 и Dennis W.

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

Деннис В. предложил опцию --norc, которая, по словам кого-то, им не подходит.

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

UH = 'пользователь @ хост'; ssh $ UH 'mv ~ / .bashrc ~ / letmein'; ssh $ UH

Пожалуйста, не сокращайся и не беги, меняй user и host, затем отредактируйте letmein и сохранить как .bashrc

Если ваша система настроена нормально, .bash_profile не будет запускаться для неинтерактивной оболочки (например, для выполнения команды).

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

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

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

ssh <hostname> rm ~/.bashrc

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

Другой способ входа на сервер - без профиля, пожалуйста, найдите команду ниже
ssh -t user@host bash --noprofile

Для AWS с использованием файла pem и без других пользователей
ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile

Надеюсь это поможет!

Из приведенных выше предложений и ответов я бы сказал, что это не файлы .bashrc или .bash_profile. Также ssh manpage говорит, что если вы укажете команду для выполнения, файлы вашего профиля не будут прочитаны.

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