spesifiser shell for ssh-økt

Jeg logger på en ekstern server via ssh som bruker www-data. Bruker www-data på serveren har standard skall satt til /bin/sh, og når jeg logger på, får jeg dash som skall. Jeg kan da skrive bash og få bash shell.

Jeg vil logge inn på bash direkte når Jeg ssh inn. Men jeg vil ikke endre standardskallet på serveren. Jeg vil at endringen min bare skal påvirke ssh-økten.

Jeg har prøvd å sette command="/bin/bash" foran min offentlige nøkkel i .ssh/authorized_keys, men dette har en annen bivirkning: mens bash fungerer som standard skall når du logger på, scp sluttet å fungere. Jeg kan ikke lenger scp filer til eller fra remore-serveren.

Hvordan kan jeg angi bash som standard skall for ssh-økt, uten å bryte andre applikasjoner?

Kommentarer

  • ssh [email protected] /bin/bash fungerte ikke '?
  • @DopeGhoti: Jeg ' m også nysgjerrig på det, men jeg mistenker at det ' vil ha det samme problemet som med hans

syntaks.

  • Jeg tviler på det, da jeg spesifiserer det på ssh kommandolinjen ikke skal ha noen innvirkning på scp.
  • Svar

    Jeg har et lignende problem på ett system Jeg bruker (standard skall er bash, jeg vil at ksh93, og chsh ikke «t arbeid).

    Min løsning, tilpasset din situasjon, er å exec ønsket skall fra ~/.profile Dash leser ved oppstart. Bash berører ikke ~/.profile med mindre den ikke finner ~/.bash_profile eller ~/.bash_login (i den rekkefølgen, se Bash-håndboken).

    # 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 setter SSH_TTY i interaktive SSH-økter, så vi » kontrollerer for å se om det er satt (ikke-tom streng) før du sørger for at Bash er tilgjengelig og utfører den. Jeg setter inn og eksporterer SHELL i tilfelle andre applikasjoner ser på det, og for å unngå at Bash kommer i en uendelig løkke på grunn av manglende begge deler ~/.bash_profile og ~/.bash_login og dermed prøve å utføre ~/.profile igjen.

    Kommentarer

    • takk. Med en viktig endring fungerer den foreslåtte tilnærmingen din. Å utføre $SHELL -l forårsaket en gaffelbombe. Tilsynelatende bash -l leser .profile også. Når -l utelates, fungerer alt som forventet.
    • Sannsynligvis fordi du mangler begge deler ~/.bash_profile og ~/.bash_login?
    • Se min redigering av svaret mitt, som gjør if uttalelse mislykkes hvis vi ' allerede kjører Bash. (ikke sikker på at dette virkelig er nødvendig siden det i stedet skal hente de andre init-filene).

    Legg igjen en kommentar

    Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *