답변:
Linux에서 실행 중이라고 가정하면 chsh
명령을 사용할 수 있습니다 .
chsh -s /bin/ksh foo
chsh -s /bin/bash username
passwd
패키지 안에 있습니다.
man chsh
쉘 변경, 항상 작동하지는 않습니다
또는 exec /bin/zsh
bash 로그인 스크립트를 사용하면 bash 인스턴스가 셸로 대체됩니다.
아니면 할 수 있습니다 ssh host "zsh -l"
L
ssh -t
마지막 옵션에 대해 TTY를 받으려면 필수입니다. 기본적으로 (와 같은 zsh -l
) 명령 이 제공되면 OpenSSH는 비 로그인 쉘을 수행하여 TTY를 할당 -l
하지 않으며 (로그인 후에 실행되기 때문에) TTY를 변경하지 않습니다.
기본 쉘을 변경하려면 / 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'
/etc/shells
쉘을 선택할 수 있으려면 바이너리 경로가 있어야합니다 .