Итак, скажем, кто-то опечатал что-то в их, .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
[ -z "$PS1" ] && return
в начале ./bashrc. Таким образом, scp прекратит синтаксический анализ .bashrc после первой строки, и вы сможете перезаписать его в случае необходимости.Ответы:
Я думаю, что ваши единственные варианты:
ssh в качестве другого пользователя и su для вашей учетной записи;
используйте что-то вроде ftp или smbclient, если соответствующие службы включены на хосте;
найти открытую уязвимость в открытом сетевом сервисе и использовать ее :).
получить администратора, чтобы решить проблему.
источник
ssh -t username@hostname /bin/sh
работает для меня.источник
.cshrc
/.tcshrc
даже для неинтерактивных оболочек.У меня была такая же проблема, и я как-то смог ее решить. Я использовал ssh для доступа к системе, нажимал и удерживал Ctrl + c, как только вошел в систему. Затем ~ / .bashrc не был прочитан, и я смог изменить его.
источник
Я использовал опубликованный CVE для выполнения команды от имени пользователя root через веб-интерфейс в программном обеспечении для мониторинга сети, которое я установил.
rm /RAID/home/tom/.bashrc
Затем я мог войти в систему и SVN отменить изменения, которые я сделал.
источник
Вам необходимо a) запустить bash без использования
source
либо~/.bashrc
или,~/.bash_profile
и b) поскольку такая оболочка не будет полноценной оболочкой для входа в систему / без tty , заставьте ssh присоединить tty :источник
ls
чтобы убедить себя, что вы в :). Также обратите внимание, что здесь будет использоватьсяdumb
термин, поэтому для меня nano не работаетНе повезло тебе.
Все команды 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_profilessh 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
. Этот ответ является расширенным вариантом вашего другого ответа, поэтому, пожалуйста, удалите другой.Что-то вроде:
что, кажется, работает, но обратите внимание, что PS1 не установлен, поэтому вы будете вводить команды без приглашения.
Преимущество в том, что он не разрушителен.
источник
пытаться
^ C есть контроль-V, то с
источник
источник
Mashing ctrl-C работает до тех пор, пока вы можете получить ctrl-C до выхода .bashrc. К сожалению, это может быть трудно сделать, если
exit
вы находитесь в начале .bashrc.Вы можете вставить ctrl-C как можно скорее, отправив его напрямую в ssh:
Обратите внимание, что
^C
напечатано как Ctrl-V, а затем Ctrl-C.Это передает один ctrl-C с последующим вводом от управляющего терминала, в то время
-tt
как принудительно назначается псевдо-терминал. Все это дает вам (несколько искаженную) оболочку на удаленной машине, обходя как можно больше .bashrc.источник
Вы можете попробовать перезаписать
.bash_profile
пустой файл с помощьюscp
команды. Из того, что я гуглил, scp использует неинтерактивный логин, который не читает.bash_profile
.источник
Вы также можете просто удалить файл bashrc:
источник
Если ваша система настроена нормально, .bash_profile не будет запускаться для неинтерактивной оболочки (например, для запуска команды).
Поскольку вы заявляете, что проблема находится в файле .bash_profile, попробуйте убрать его с пути:
источник
Пожалуйста, не вырезайте и не запускайте, не изменяйте,
user
аhost
затем редактируйтеletmein
и сохраняйте как.bashrc
источник
Престижность для user60069, у меня это сработало, но я использую специфичный для оболочки загрузочный файл .bashrc, так что вход в систему с / bin / sh работал для меня.
Однако, если вы оказались в ситуации «нет такой удачи», я предлагаю это решение, основанное на решениях user60069 и Dennis W:
Деннис В предложил вариант --norc, который, по словам кого-то, не работал для них.
Запустите "man bash" или "man (ваша оболочка)", чтобы отключить загрузочные файлы. Вам нужно только использовать отвратительную оболочку на время, необходимое для решения проблемы.
источник
Другой способ входа на сервер без профиля, пожалуйста, найдите ниже команду
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
и отправить результат по почте?источник