Допустим, в их .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
и отправить результат по почте?