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
szintaxis.
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ó, hogybash -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).
ssh [email protected] /bin/bash
nem működött ' nem működött?