specifică shell pentru sesiunea ssh

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 [email protected] /bin/bash nu a funcționat '?
  • @DopeGhoti: Am ' m de asemenea, curios despre asta, dar bănuiesc că ' va avea aceeași problemă ca și cu

.

  • Mă îndoiesc, deoarece specificarea ei pe linia de comandă 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).

    Lasă un răspuns

    Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *