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

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

사용자가 서버에 SSH로 접속할 때 사용되는 셸을 어떻게 설정합니까? 예를 들어 저는 BASH를 견딜 수 없고 ZSH를 사용해야 합니다 .zsh_profile. 머신에 SSH로 접속할 때 ZSH가 내 프로필( )과 함께 로드되도록 하려면 어떻게 해야 합니까?

SSH를 통해 여러 매개변수를 전달하고 싶지도 않습니다. 기본 쉘을 설정할 수 없나요?

답변1

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

플래그 -t는 의사 tty 할당을 강제하고 -l플래그는로그인 쉘.

답변2

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

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

답변3

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

또는 exec /bin/zshbash 로그인 스크립트를 계속 사용할 수 있습니다. 이렇게 하면 bash 인스턴스가 쉘로 대체됩니다.

아니면 할 수 있어요ssh host "zsh -l"

답변4

로컬을 원격 서버에 어떻게 넣을 수 있는지 잘 모르겠습니다 .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로컬에서 실행해야 할 항목을 정의합니다. 이는 로컬 파일을 소싱하기 위해 원격 서버에 복사하는 데 사용됩니다. 여기에 문제가 있습니다. 이는 원격 호스트에 '성공적으로' 연결한 후에만 발생합니다.

의미:

  1. 원격 연결이 열려 있고 활성화되어 있어야 합니다.
  2. 원격 셸에는 아직 파일이 없으므로 파일이 거기에 있을 때까지 기다려야 합니다.sleep
  3. 로컬은 파일을 원격 서버에 저장하는 데 사용되며 , 원격 서버는 스크립트 sftp에서 깨어나 소스를 제공합니다.sleep

그것은 매우 해킹적입니다. 더 좋은 방법이 있는지 알고 싶습니다.

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

관련 정보