Jag loggar in på en fjärrserver via ssh som användare www-data. Användaren www-data på servern har sitt standardskal inställt på /bin/sh, och när jag loggar in får jag streck som mitt skal. Jag kan sedan skriva bash och få bash skal.
Jag skulle vilja logga in i bash direkt när Jag ssh in. Men jag vill inte ändra standardskalet på servern. Jag vill att min ändring bara påverkar ssh-sessionen.
Jag har försökt sätta command="/bin/bash" framför min offentliga nyckel i .ssh/authorized_keys, men detta har en annan bieffekt: medan bash fungerar som standardskal när du loggar in, scp slutade fungera. Jag kan inte längre scp-filer till eller från remore-servern.
Hur kan jag ställa in bash som standardskal för ssh-session, utan att bryta andra applikationer?
Kommentarer
syntax.
ssh kommandoraden bör inte ha någon effekt på scp. Svar
Jag har en liknande fråga i ett system Jag använder (standardskal är bash, jag vill att ksh93 och chsh inte ”t arbete).
Min lösning, anpassad för din situation, är att exec det önskade skalet från ~/.profile Dash läser vid start. Bash trycker inte på ~/.profile såvida det inte hittar ~/.bash_profile eller ~/.bash_login den ordningen, se Bash-manualen.
# in ~/.profile: if [ "$SHELL" != "/usr/bin/bash" -a -n "$SSH_TTY" -a -x /usr/bin/bash ]; then export SHELL="/usr/bin/bash" exec $SHELL -l fi
SSH ställer SSH_TTY i interaktiva SSH-sessioner, så vi ” kontrollerar om det är inställt (icke-tom sträng) innan du ser till att Bash är tillgänglig och kör den. Jag ställer in och exporterar SHELL om någon annan applikation tittar på den, och för att undvika att Bash hamnar i en oändlig slinga på grund av att båda ~/.bash_profile och ~/.bash_login och därmed försöker köra ~/.profile igen.
Kommentarer
- tack. Med en viktig ändring fungerar din föreslagna metod. Att köra
$SHELL -lorsakade en gaffelbomb. Tydligenbash -lläser också.profile. När-lutelämnas fungerar allt som förväntat. - Förmodligen för att du saknar båda
~/.bash_profileoch~/.bash_login? - Se min redigering av mitt svar, vilket gör att
ifuttalande misslyckas om vi ' redan kör Bash. (inte säker på att detta verkligen krävs eftersom det i stället ska plocka upp de andra init-filerna).
ssh [email protected] /bin/bashfungerade inte '?