SSH가 사용하는 쉘을 선택 하시겠습니까? 할 때

사용자가 서버에 SSH를 연결할 때 사용되는 셸을 설정하는 방법 예를 들어 BASH를 견딜 수 없으며 ZSH를 사용해야 .zsh_profile합니다. 시스템에 ssh 할 때 ZSH가 프로파일 ( ) 과 함께로드되도록 어떻게해야합니까?

ssh로 많은 매개 변수를 전달하고 싶지 않습니다. 기본 셸을 설정할 수 없습니까?



답변

Linux에서 실행 중이라고 가정하면 chsh명령을 사용할 수 있습니다 .

chsh -s /bin/ksh foo
chsh -s /bin/bash username

답변

man chsh 쉘 변경, 항상 작동하지는 않습니다

또는 exec /bin/zshbash 로그인 스크립트를 사용하면 bash 인스턴스가 셸로 대체됩니다.

아니면 할 수 있습니다 ssh host "zsh -l"


답변

기본 쉘을 변경하려면 / etc / passwd를 편집하십시오 (권한이 있거나 시스템 관리자에게 문의하십시오).


답변

기본 쉘을 변경할 수 없으면 ssh -t user@host 'zsh -l'작동합니다.

-t플래그는 의사 -tty 할당을 강제 실행 -l하고 로그인 쉘을 생성합니다 .


답변

로컬 .zshrc서버를 어떻게 원격 서버에 넣을 수 있는지 잘 모르겠습니다 (영구적으로 저장하지 않음). 원격 서버에서 로그인 쉘을 변경하는 데 도움이됩니다.

공유 계정 zsh이므로이 방법으로는 본인 만 사용할 수 있습니다 .

이것을 ~/.ssh/config로컬 컴퓨터 의 파일에 추가하십시오 .

Host yourServer
    HostName <IP, FQDN or DNS resolvable name>
    IdentityFile ~/.ssh/<your keyfile>
    RemoteCommand zsh -l
    RequestTTY force
    User <yourUsername>

아래와 같이 원하는 것을 달성하는 해킹 방법이있을 수 있습니다.

경고 이것은 보증이 없으며 ‘현명한’것처럼 보이지 않지만 로컬 파일을 서버에 넣고 이것을 사용하여 로그인 셸에서 소스로 관리했습니다.

Host someHost
    HostName someIP
    IdentityFile ~/.ssh/somekey.pem
    RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
    PermitLocalCommand yes
    LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
    RequestTTY force
    User someUser

어떻게 작동합니까?

  • RemoteCommand 원격 측에서 실행해야 할 사항을 정의합니다.
  • LocalCommand로컬에서 실행해야 할 사항을 정의합니다. 로컬 파일을 원격 서버에 복사하여 소싱합니다. 다음은 catch입니다. 원격 호스트에 ‘성공적으로’연결 한 후에 만 ​​발생합니다.

의미:

  1. 리모컨에 연결되어 있고 열려 있어야합니다
  2. 원격 쉘에 아직 파일이 없으므로 파일이있을 때까지 기다려야합니다. sleep
  3. 로컬은 sftp파일을 원격 서버에 넣고 원격 서버를 깨우고 sleep스크립트를 소스로 사용합니다.

그것은 슈퍼 해킹입니다, 더 좋은 방법이 있는지 알고 싶습니다.

업데이트 : ‘긴’수면 시간 대신 사용할 수 있습니다.
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'