bash_profile 또는 bashrc를 실행하지 않고 로그인


75

따라서 누군가 .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

4
scp는 연결할 때 .bashrc도 읽으므로 scp 명령이 작동하지 않습니다. 문제를 피하려면 앞으로 [ -z "$PS1" ] && return./bashrc의 시작 부분 과 같은 것을 추가 할 수 있습니다 . 이 방법으로 scp는 첫 번째 줄 이후에 .bashrc 구문 분석을 중지하고 비상시이를 덮어 쓸 수 있습니다.
dalloliogm

답변:


24

당신의 유일한 옵션은 다음과 같습니다.

  • 다른 사용자로 ssh하고 귀하의 계정으로 su;

  • 호스트에서 관련 서비스가 활성화 된 경우 ftp 또는 smbclient와 같은 것을 사용하십시오.

  • 개방형 네트워크 서비스에서 개방형 취약점을 찾아서 악용하십시오. :)

  • 관리자가 문제를 해결하도록하십시오.


4
"컴퓨터에 물리적으로 액세스 할 수 없으며이 기능을 사용하는 유일한 사용자 계정입니다."
Dennis Williamson

나는이 길을 가고있다. 솔루션을 찾은 후에 게시하겠습니다. 운 좋게도 몇 가지 공격 방법이 있습니다.
Tom Ritter

1
Filezilla를 SFTP로 사용하여 서버에 넣었습니다. 정말 감사합니다. 당신은 저를 구했습니다. 우연히 내 .bash_profile에 "exit 1"조건이있어서 나를 화나게했습니다.
djangofan

117

ssh -t username@hostname /bin/sh 나를 위해 작동합니다.


이것은 잘 작동하며 문제를 해결하는 데 사용할 수있는 쉘을 제공합니다.
MT.

1
구글 크롬 (의 보안 셸 응용 프로그램이 작업을 수행하려고 chrome.google.com/webstore/detail/secure-shell/... )하지만, 명령 줄 인수를 넣어 어디에 어떻게 / 알아낼 수 없습니다. 팁이 있습니까?
Benj

2
이것은 나를 위해 작동하지 않습니다 (man 페이지에 따라야하지만). 로컬 호스트는 우분투 14.04.1을 실행하며 원격 호스트의 우분투 12.04.5입니다. 로그인 쉘이 tcsh이고 원격 호스트에서 가비지를 인쇄하기 때문에 재 동기화 할 수 없습니다 (tcsh : 해당 파일 또는 디렉토리가 없음 tcsh : "/ u / levy"에서 시작하려고 시도 중입니다. 디렉토리는 NSF 마운트됩니다). 로그인 쉘을 우회하는 문제를 해결할 것이라고 생각했지만 작동하지 않습니다.
Silvio Levy

2
기본 쉘이 csh의 경우 /이됩니다에서 tcsh 항상 소스 .cshrc/ .tcshrc도 비 대화 형 쉘을.
Brian Vandenberg

나는이 시점에 도달하기 위해 내 어리 석음에 내 엉덩이를 웃고 여기 앉아있다. 귀하의 솔루션은 훌륭하게 작동했습니다. 이
어설프게

36

나는 같은 문제를 겪었고 어떻게 든 해결할 수있었습니다. ssh를 사용하여 시스템에 액세스하고 시스템에 로그인하자마자 Ctrl + c를 길게 누릅니다. 그런 다음 ~ / .bashrc를 읽지 못하여 수정할 수있었습니다.


11
나는 의심했지만, 실제로 작동합니다 ...
rmobis

이것은 천재입니다!
user1747134

실제로 작동합니다 ... 감사합니다! 다른 방법은 저에게 효과적이지 않았습니다.
Zzzach ...

.bash_profile 만있는 Mac에서 이것은 나를 위해 일했습니다 :)
AnneTheAgile

세상에, 나는 전체 인터넷을 검색했다고 생각했는데, 이것을 시도하기로 결정했습니다. 이것이 나를 위해 유일한 방법입니다! 감사!
Jiahao Cai

21

게시 된 CVE를 사용하여 설치 한 네트워크 모니터링 소프트웨어의 웹 인터페이스를 통해 루트로 명령을 실행했습니다. rm /RAID/home/tom/.bashrc

그런 다음 로그인하고 svn으로 변경 내용을 되돌릴 수 있습니다.


11
그것은 동시에 굉장하고 파괴적입니다.
MikeyB

1
@TomRitter : ᴄᴠᴇ 참조를 제공하십시오.
user2284570

1
그것은 오래된 버전의 선인장에 있었으므로 8 년 된 소프트웨어를 실행하지 않으면 도움이되지 않을 것이라고 생각합니다. 그리고 8 살짜리 소프트웨어를 사용하고 있다면 도와 드릴 수 없습니다. ;)
Tom Ritter

15

a) 또는 or 중 하나를 사용 하지 않고 bash 를 시작해야합니다 .b) 그러한 쉘은 전체 로그인 쉘이 아니거나 tty 가 없기 때문에 sshtty 를 첨부 하도록 강제 하십시오 .source~/.bashrc~/.bash_profile

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

3
이것은 작동하지만 일반적인 프롬프트가 표시되지 않고 빈 화면 만 표시됩니다. ls당신이 :)에 있음을 확신시키기 위해 노력 하십시오. 또한 이것은 dumb용어 를 사용할 것이므로 nano는 작동하지 않습니다
Ciprian Tomoiagă

7

운이 없어

모든 ssh 명령은 로그인 쉘을 실행합니다. ssh $COMMAND실행 $SHELL -c $COMMAND, scp실행은 $SHELL -c /path/to/sftp-server, 일반은 ssh당신의 쉘을 실행합니다.


3
이것은 sftp에서도 마찬가지입니다. 심지어 SSH 서브 시스템도 쉘 내에서 실행됩니다.
lxgr 2016 년

내 경험상 ssh 매뉴얼 페이지에 "명령이 지정되면 로그인 쉘 대신 원격 호스트에서 실행됩니다."라고 표시되어 있어도 정확합니다. 그러나 포스터는 가장 높은 등급의 답변 (ssh 호스트 이름 / bin / sh)을 사용하여 문제를 해결할 수있었습니다. 무엇을 제공합니까?
Silvio Levy

@Silvio, OP의 대답은 SSH와 관련이없는 익스플로잇을 사용했다는 것입니다.
Tobu

권리. 누군가가 가장 높은 등급의 답변으로 성공을보고했으며 나는 그것이 OP라고 가정했습니다. 나는 그것이 효과가 있었기를 바란다. 나는 비슷한 상황을 겪고 있지만, 단지 방해하지 않는 것은 성가시다. (위의 가장 높은 답변 아래에서 내 의견을 참조하십시오.)
Silvio Levy

6

위의 답변 중 어느 것도 ssh의 로그인 쉘을 무시할 수 없습니다. 전체 명령 행을 전달할 수 있으므로 원격 쉘을 실행하여 명령을 처리하고 명령의 작업 환경을 설정합니다. 그것이 쉘의 목적이며 유닉스 방식입니다. 쉘없이 무언가를 실행하려고하면 모든 종류의 호환성 문제가 발생합니다. 마찬가지로 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는 항상 무엇이든 실행됩니다. 그 줄을 거기에 두지 않아야합니다! 해당 줄이 없으면 문제가 없었을 것입니다.

다른 방법을 찾거나 관리자를 찾아야합니다. 이것은 관리자를위한 것입니다.


좋은 점들; 어떤 실행 파일은 명령이 도움이 될 수 있습니다 당신이 설명대로 전달되지 만, 다소 논쟁 점에 대한 다음과 같은 경우 /bin/sh 첫 번째 실행에 도착, 그것은 수 있도록, 배쉬가 있기 때문에 하지 않는 로드 ~/.bashrc로 호출 할 때 sh. 이 답변은 다른 답변의 상위 집합이므로 다른 답변을 삭제하십시오.
mklement

3

다음과 같은 것 :

ssh host "/bin/bash --norc"

PS1이 설정되지 않았으므로 프롬프트없이 명령을 입력하게됩니다.

이것은 비파괴적인 장점이 있습니다.


1
이것은 작동하지 않으며, 성공적인 로그인을 시도했지만 로그인 할 수 없으므로 bash --norc
Tom Ritter를

2

시험

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

^ C control-v가 있고 c가있다


1
내 시스템의 ctrl-v 및 ctrl-c입니다. 어쨌든 고마워! :)
mzuther

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

이것은 아무것도 할 수 없을 때 매우 제한된 환경에서 나를 위해 일했습니다. .bashrc의 전체 경로를 지정해야했습니다.
zbeekman

1

.bashrc가 종료되기 전에 ctrl-C를 얻을 수있는 한 ctrl-C를 매싱하는 것이 작동합니다. 불행히도, 이것은 exit.bashrc에서 빠르면 수행하기 어려울 수 있습니다 .

ssh에 직접 파이프하여 ctrl-C를 가능한 빨리 넣을 수 있습니다.

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

그는 주 ^CCTRL-C 다음에 CTRL-V와 같은 입력됩니다.

이것은 하나의 ctrl-C를 파이프하고 제어 터미널의 입력을 파이프하면서 -tt의사 터미널을 강제로 할당합니다. 모두 이것이 가능한 한 많은 .bashrc를 우회하면서 원격 시스템에 약간의 잘못된 쉘을 제공한다고 말했습니다.


0

명령을 .bash_profile사용하여 빈 파일 로 덮어 쓰기를 시도 할 수 있습니다 scp. 내가 봤던 것에서 scp는 읽지 않는 비대화 형 로그인을 사용합니다 .bash_profile.


내가 (가설 적으로) 디렉토리 구조를 잘못 기억하고 있고 나에게 오류를주지 않는다면, 이것은 작동하지 않습니다-scp도 파일을 실행합니다.
Tom Ritter

1
사람들이 깨닫지 못하는 것은 scp가 특별한 것이 아니라는 것입니다. 그것은 ssh를 통해 실행되는 또 다른 명령 일뿐입니다. 이는 scp와 함께 대화 형 ssh 세션 happpens에서 발생하는 모든 것을 의미합니다.
larsks

sftp는 ssh 하위 시스템에 영향을줍니다.
allo

0

bashrc 파일을 삭제할 수도 있습니다.

ssh <hostname> rm ~/.bashrc

문제는 bashrc가 아닌 .bash_profile 파일에 있습니다.
Laurent Etiemble

1
이것은 작동하지 않습니다-먼저 쉘을 시도하고 실패합니다.
Tom Ritter

0

시스템이 정상적으로 설정되면 비 대화식 쉘 (예 : 명령 실행)에 대해 .bash_profile이 실행되지 않습니다.

문제가 .bash_profile 파일에 있다고 설명 했으므로 문제를 다른 곳으로 옮기십시오.

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

나는 어떤 방법으로 파일이 중요 연결되어 있었다 생각하지 않았다 - .bash_profile에가 .bashrc에 = 포함 (나는 더 많은 정보를 추가.
톰 리터에게

1
그러나 bash 매뉴얼 페이지에서 확인한 Lockie가 제안하는 것은 비 대화식 쉘이 .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

Dennis W는 --norc 옵션을 제공했는데 누군가가 효과가 없다고 말했습니다.

시작 파일을 비활성화하는 옵션에 대해서는 "man bash"또는 "man (쉘)"을 실행하십시오. 문제를 해결하는 데 걸리는 시간 동안 만 끔찍한 셸을 사용해야합니다.


0

서버에 로그인하는 다른 방법은 프로필이 없습니다. 아래 명령을 찾으십시오.
ssh -t user@host bash --noprofile

pem 파일을 사용하고 다른 사용자는 사용하지 않는 AWS의 경우
ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile

도움이 되었기를 바랍니다!


-1

위에 제공된 제안과 응답에서 .bashrc 또는 .bash_profile 파일이 아니라고 말할 수 있습니다. 또한 ssh 맨 페이지는 실행할 명령을 지정하면 프로필 파일을 읽을 수 없다고 말합니다.

절대 경로와 다른 로그인 쉘 (ksh? csh? sh?)을 실행하는 것이 좋습니다. 또한, 완전히 다른 문제 (quota? 홈 디렉토리에 대한 실행 및 읽기 권한?) 일 수도 있으므로 부수적 인 접근 방식이 더 좋습니다. 다른 사용자에게 ls -la $YOUR_HOME_DIR결과를 메일로 보내 달라고 요청할 수 있습니까 ?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.