ange skal för ssh-session

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

  • ssh [email protected] /bin/bash fungerade inte '?
  • @DopeGhoti: Jag ' m också nyfiken på det men jag misstänker att det ' kommer att ha samma problem som med hans

syntax.

  • Jag tvivlar på det, eftersom jag specificerar det på 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. Tydligen bash -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).

    Lämna ett svar

    Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *