Mă conectez la un server la distanță prin ssh ca utilizator www-data
. Utilizatorul www-data
de pe server are shell-ul său implicit setat la /bin/sh
, iar când mă conectez, primesc liniuță ca shell. Pot apoi să tastați bash
și să obțin shell bash
.
Aș dori să mă conectez direct la bash, când Am acces. Dar nu vreau să schimb shell-ul implicit de pe server. Vreau ca modificarea mea să afecteze sesiunea ssh.
Am încercat să pun command="/bin/bash"
în fața cheii mele publice din .ssh/authorized_keys
, dar acest lucru are un alt efect secundar: în timp ce bash funcționează ca shell implicit la conectare, scp
nu mai funcționează. Nu mai pot scp fișiere către sau de la serverul de remore.
Cum pot seta bash
ca shell implicit pentru sesiunea ssh, fără a sparge alte aplicații?
Comentarii
.
ssh
nu ar trebui să aibă niciun efect asupra scp
. Răspuns
Am o problemă similară pe un sistem Eu folosesc (shell-ul implicit este bash
, vreau ksh93
și chsh
nu „t work).
Soluția mea, adaptată situației dvs., este să exec
coaja dorită din ~/.profile
Dash citește la pornire. Bash nu atinge ~/.profile
decât dacă nu găsește ~/.bash_profile
sau ~/.bash_login
(în această ordine, consultați manualul Bash).
# 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 setează SSH_TTY
în sesiuni interactive SSH, așa că noi ” Verificați din nou dacă ați setat (șirul ne-gol) înainte de a vă asigura că Bash este disponibil și de a-l executa. „M setez și export SHELL
în cazul în care orice altă aplicație se uită la el și pentru a evita ca Bash să ruleze într-o buclă infinită din cauza lipsei ambelor ~/.bash_profile
și ~/.bash_login
și încercând astfel să executați din nou ~/.profile
.
Comentarii
- mulțumesc. Cu o modificare importantă, abordarea sugerată funcționează. Executarea
$SHELL -l
a provocat o furcă bombă. Aparent,bash -l
citește și.profile
. Când omiteți-l
, totul funcționează conform așteptărilor. - Probabil pentru că vă lipsesc ambele
~/.bash_profile
și~/.bash_login
? - Consultați modificarea mea la răspunsul meu, ceea ce face ca
if
declarația nu reușește dacă ' rulăm deja Bash. (nu sunt sigur că acest lucru este necesar întrucât ar trebui să preia celelalte fișiere init).
ssh [email protected] /bin/bash
nu a funcționat '?