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 -l
orsakade en gaffelbomb. Tydligenbash -l
läser också.profile
. När-l
utelämnas fungerar allt som förväntat. - Förmodligen för att du saknar båda
~/.bash_profile
och~/.bash_login
? - Se min redigering av mitt svar, vilket gör att
if
uttalande 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/bash
fungerade inte '?