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
syntaks.
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. Tilsynelatendebash -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).
ssh [email protected] /bin/bash
fungerte ikke '?