ssh
원격 서버를 통해 비대화형 명령 실행을 위해 특정 셸을 강제로 사용하려면 어떻게 해야 합니까?
원격 서버의 기본 셸은 이지만 zsh
주어진 명령을 실행하려면 이를 사용해야 합니다 /bin/sh
. 다음 명령을 실행하면 예상대로 실행 foo
됩니다 .zsh
ssh -tq -l root -o LogLevel=ERROR remote-server "foo"
지정을 시도했지만 /bin/sh -c "foo"
이로 인해 zsh
시작 /bin/sh
과 실행 만 발생합니다 foo
.
/bin/sh
패스하지 않고 직접 사용해야 하는데zsh
ssh
다른 쉘을 정의할 수 있는 옵션이나 로컬 또는 원격 설정이 있습니까 ?
모든 비대화형 명령(비로그인 쉘)에 대해 서로 다른 쉘을 설정할 수 있습니까?
답변1
설계상 로그인 셸을 우회하는 것은 불가능합니다. 제한된 셸(예: rsh/rksh/rbash/…의 제한된 셸 또는 특정 프로토콜만 허용하는 셸(예: rssh 또는 git-shell))을 사용하여 SSH 계정을 설정할 수 있습니다. 클라이언트는 다른 쉘을 지정할 수 없습니다.
다른 셸에서 코드를 실행하려면 로그인 셸에서 셸을 실행하고 코드를 내부 셸에 전달해야 합니다. 이는 다른 언어(예: Perl, Python 등)로 해석된 코드를 실행하기 위해 수행해야 하는 작업과 다르지 않습니다. 정확하게 인용하시기 바랍니다. 표준 입력이 필요하지 않은 경우 표준 입력에 스크립트를 전달하면 중첩된 참조가 필요하지 않습니다.
동일한 계정에 대해 사용자 데이터베이스에 여러 항목이 있을 수 있습니다. "동일 계정"이란 동일한 사용자 ID를 의미합니다. 항목에는 사용자 이름이 달라야 하며 비밀번호, 쉘 등이 다를 수 있습니다. 보다사용자 계정에 여러 개의 비밀번호를 지정할 수 있습니까?. 일부 프로그램은 사용자 ID( $USER
사용자가 로그인할 때 선택한 이름으로 설정된 환경 변수의 사용자 이름이 아닌)에서 조회하기 때문에 이는 그다지 신뢰할 수 없습니다.
대화형 사용을 위해 zsh를 원하지만 Bourne 스타일 SSH 셸을 원한다면 내가 한 일을 할 수 있습니다. 로그인 셸을 /bin/sh
(또는 POSIX 셸이 필요한 모든 항목)로 설정하고 (좀 더 복잡한 버전)을 사용합니다 export SHELL=/bin/zsh; exec $SHELL
. 나의 .profile
.