adja meg a shell-t az ssh munkamenethez

Az ssh-en keresztül távoli kiszolgálóra jelentkezem, mint www-data felhasználó. A kiszolgáló www-data felhasználójának alapértelmezett shellje /bin/sh, és amikor bejelentkezem, a kötőjelet kapom shellként. Ezután be tudom írni a következőt: bash, és megszerezhetem az bash héjat.

Szeretnék közvetlenül bejelentkezni a bash-ba, amikor Belépek. De nem akarom megváltoztatni az alapértelmezett héjat a szerveren. Azt akarom, hogy a módosításom csak az ssh munkamenetet érinti.

Megpróbáltam elhelyezni a command="/bin/bash" infront a nyilvános kulcsomban a .ssh/authorized_keys fájlban, de ennek van még egy mellékhatása: míg a bash alapértelmezett shellként működik, amikor bejelentkezik, scp leállt a munka. Már nem tudok scp fájlokat küldeni a remore szerverre vagy onnan.

Hogyan állíthatom be a bash alapértelmezett shellként az ssh munkamenethez, más alkalmazások megszakítása nélkül?

Megjegyzések

  • ssh [email protected] /bin/bash nem működött ' nem működött?
  • @DopeGhoti: I ' m szintén kíváncsi rá, de gyanítom, hogy ' ugyanaz a probléma, mint az ő

szintaxis.

  • Kétlem, mert a ssh parancssorban való megadásnak semmilyen hatása nem lehet a scp.
  • Válasz

    Hasonló problémám van egy rendszeren Használom (az alapértelmezett shell a bash, ksh93 és chsh nem “t munka).

    Az én helyzetemhez igazított megoldásom az, hogy exec a ~/.profile kívánt héjat, amely A kötőjel az indításkor olvasható. Bash nem érinti a ~/.profile hacsak nem találja meg ~/.bash_profile vagy ~/.bash_login ezt a sorrendet lásd a Bash kézikönyvben).

    # 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 

    Az SSH interaktív SSH munkamenetekben állít be SSH_TTY, így mi ” ellenőrizze, hogy az adott készlet (nem üres karakterlánc)-e, mielőtt megbizonyosodna arról, hogy a Bash elérhető és végrehajtja-e. Beállítom és exportálom a SHELL -t, ha bármilyen más alkalmazás megnézi, és hogy elkerüljem, hogy Bash végtelen ciklusba futhasson, mivel hiányzik mindkét ~/.bash_profile és ~/.bash_login, és ezzel megpróbálja újra végrehajtani a ~/.profile parancsot.

    Megjegyzések

    • köszönöm. Egy fontos módosítással a javasolt megközelítés működik. A $SHELL -l végrehajtása villabombát okozott. Nyilvánvaló, hogy bash -l beolvassa a .profile -t is. A -l kihagyásakor minden a várt módon működik.
    • Valószínűleg azért, mert mindkettő hiányzik ~/.bash_profile és ~/.bash_login?
    • Lásd a válaszomra tett szerkesztésemet, ami a if utasítás sikertelen, ha ' már fut a Bash. (Nem biztos, hogy erre valóban szükség van, mivel inkább a többi init fájlt kell felvennie).

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük