사용자가 서버에 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/zsh
bash 로그인 스크립트를 계속 사용할 수 있습니다. 이렇게 하면 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
로컬에서 실행해야 할 항목을 정의합니다. 이는 로컬 파일을 소싱하기 위해 원격 서버에 복사하는 데 사용됩니다. 여기에 문제가 있습니다. 이는 원격 호스트에 '성공적으로' 연결한 후에만 발생합니다.
의미:
- 원격 연결이 열려 있고 활성화되어 있어야 합니다.
- 원격 셸에는 아직 파일이 없으므로 파일이 거기에 있을 때까지 기다려야 합니다.
sleep
- 로컬은 파일을 원격 서버에 저장하는 데 사용되며 , 원격 서버는 스크립트
sftp
에서 깨어나 소스를 제공합니다.sleep
그것은 매우 해킹적입니다. 더 좋은 방법이 있는지 알고 싶습니다.
업데이트: '긴' 수면 시간 대신 사용할 수 있습니다.
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'