로그인 쉘에 ssh + sudo + su


11

sudo su내 세션의 나머지 부분을 특수 용도의 사용자로 로그인하는 데 사용 하기 위해 정기적으로 ssh를 여러 대 설치했습니다 . 일반적인 작업 과정은 다음과 같습니다.

mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff

나는 이것을 별칭으로 할 수있는 하나의 라이너로 정리하고 싶습니다. 따라서 각 기계에 대한 별칭을 설정하고 sudo su - specialuser상용구 를 입력하지 않고도 단일 명령에 있어야하는 위치에 도달 할 수 있습니다 . 로그인 me@othermachine을 설정 sudo su해도되지만 me필요한 것처럼 작동 할 수있는 유연성을 유지하고 싶습니다 .

( 참고 : 나는 통제 othermachine방법이나 설정 방법을 가지고 있지 않습니다 . 이것은 내가 고용되었을 때 시작된 확립 된 워크 플로우입니다.)

내 첫 생각은 그냥

ssh me@othermachine "sudo su - specialuser"

그리고 이런 종류의 작품이지만, 그것은 나에게 프롬프트를 얻지 못하고 ^C죽이고 나를 로그 아웃합니다.

Full Login Shell로 Run Remote ssh 명령을 읽은 후 다음 과 같은 몇 가지 이국적인 것을 시도했습니다.

ssh me@othermachine 'bash -l -c "sudo su - specialuser"'

ssh me@othermachine 'bash -l -c "sudo su - specialuser"; bash'

-어느 쪽도 내가 일할 것으로 기대했지만 그들은 효과가 없었지만 나는 완전성을 위해 노력해야한다고 생각했습니다. 이들은 동일리스 프롬프트 쉘 (위한 덤리스 프롬프트 쉘 번째 제조 meexit대한 하나를 -ing specialuser). 그리고 나는 시도했다

ssh me@othermachine "sudo su - specialuser -c bash -l"

그러나 그것은 단지 나를 얻었다

sudo: no tty present and no askpass program specified

더 나은 아이디어?


~/.profile짧은 지연 후에 sudo 명령을 추가하는 것은 어떻습니까?
Alex

아이디어는 이상한 경우에 sudo맞고 싶지 않다는 것 ^C입니까? 더 좋은 것을 얻을 수 없다면 시도해 볼 수 있습니다.
David Moles

1
su me에서 할 수 있습니다 specialuser. 또는 .profile또는 .bashrc, 당신은 따르지 않는 경우 sudo에는 exit, 첫 번째는 exit다시에 당신을 데려 갈 것이다 me세션을 종료하기 위해 두 번째로,. 심지어 플래그 파일, 그래서 사용 sudo앞에는 [ -f ~/.keep.me ] && del ~/.keep.me하고 다음을 [ \! -f ~/.keep.me ] && exit: 당신이 다음 명령 만 스크립트 또는 별명을 필요 me:>~/.keep.me; exit. 이제 exit세션이 종료되고 me로그인 세션으로 돌아갑니다.
AFH

1
보안상의 이유로 /bin/bash간단하지 않은 최종 버전으로 작성하십시오 bash( 트로이 목마 를 피하기 위해 ). 특히 sudo전에 있다면 ...
Hastur

답변:


11

이 라인은 당신을 위해 작동합니다

ssh -t me@machine "sudo su - specialuser" 

이 솔루션은 -t스위치에 따라 프롬프트를 표시하거나 표시하지 않습니다

ssh -t me@machine "/bin/bash -l"   # Give me a prompt

ssh  me@machine "/bin/bash -l"     # Give me NO prompt
ssh  me@machine                    # Give me NO prompt

의 메모 man ssh

-t
의사 -tty 할당을 강제합니다. 이는 원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있으며, 예를 들어 메뉴 서비스를 구현할 때 매우 유용합니다. ssh에 로컬 tty가 없더라도 다중 -t 옵션은 tty 할당을 강제 합니다.


이것은 나를 위해 작동합니다 ... 호스트 특정 ~ / .ssh / config 설정을 통해 수행 할 수 있습니까?
hey

1
@ where, yes 당신은 RequestTTY force(와 같은 -t)로 할 수 있습니다 RemoteCommand sudo su - specialuser! 그러나 SSH를 사용하는 다른 프로그램 (예 : scp, rsync 등)은이 호스트에서 더 이상 제대로 작동하지 않습니다.
Robert Riedl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.