사용자가 서버에 SSH를 연결할 때 사용되는 셸을 설정하는 방법 예를 들어 BASH를 견딜 수 없으며 ZSH를 사용해야 .zsh_profile
합니다. 시스템에 ssh 할 때 ZSH가 프로파일 ( ) 과 함께로드되도록 어떻게해야합니까?
ssh로 많은 매개 변수를 전달하고 싶지 않습니다. 기본 셸을 설정할 수 없습니까?
답변
Linux에서 실행 중이라고 가정하면 chsh
명령을 사용할 수 있습니다 .
chsh -s /bin/ksh foo
chsh -s /bin/bash username
답변
man chsh
쉘 변경, 항상 작동하지는 않습니다
또는 exec /bin/zsh
bash 로그인 스크립트를 사용하면 bash 인스턴스가 셸로 대체됩니다.
아니면 할 수 있습니다 ssh host "zsh -l"
답변
기본 쉘을 변경하려면 / etc / passwd를 편집하십시오 (권한이 있거나 시스템 관리자에게 문의하십시오).
답변
답변
로컬 .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입니다. 원격 호스트에 ‘성공적으로’연결 한 후에 만 발생합니다.
의미:
- 리모컨에 연결되어 있고 열려 있어야합니다
- 원격 쉘에 아직 파일이 없으므로 파일이있을 때까지 기다려야합니다.
sleep
- 로컬은
sftp
파일을 원격 서버에 넣고 원격 서버를 깨우고sleep
스크립트를 소스로 사용합니다.
그것은 슈퍼 해킹입니다, 더 좋은 방법이 있는지 알고 싶습니다.
업데이트 : ‘긴’수면 시간 대신 사용할 수 있습니다.
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'