Ik log in op een externe server via ssh als gebruiker www-data
. Gebruiker www-data
op de server heeft zijn standaard shell ingesteld op /bin/sh
, en wanneer ik inlog, krijg ik dash als mijn shell. Ik kan dan bash
typen en bash
shell krijgen.
Ik wil graag direct inloggen op bash, wanneer Ik ssh in. Maar ik wil de standaardshell op de server niet wijzigen. Ik wil dat mijn wijziging alleen van invloed is op de ssh-sessie.
Ik heb geprobeerd command="/bin/bash"
voor mijn openbare sleutel in .ssh/authorized_keys
, maar dit heeft nog een neveneffect: terwijl bash als standaardshell werkt bij het inloggen, scp
gestopt met werken. Ik kan geen bestanden meer van of naar de herstelde server scp.
Hoe kan ik bash
als standaard shell voor ssh-sessie, zonder andere applicaties te breken?
Reacties
syntax.
ssh
commandoregel geen enkel effect zou moeten hebben op scp
. Antwoord
Ik heb een soortgelijk probleem op één systeem Ik gebruik (standaard shell is bash
, ik wil ksh93
, en chsh
niet “t werk).
Mijn oplossing, aangepast aan uw situatie, is exec
de gewenste shell van ~/.profile
, die Dash leest bij opstarten. Bash “raakt ~/.profile
niet aan, tenzij het ~/.bash_profile
of ~/.bash_login
(in die volgorde, zie de Bash-handleiding).
# 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 stelt SSH_TTY
in interactieve SSH-sessies, dus we ” opnieuw controleren om te zien of dat is ingesteld (niet-lege tekenreeks) voordat u ervoor zorgt dat Bash beschikbaar is en het uitvoert. Ik “m het instellen en exporteren van SHELL
voor het geval een andere applicatie ernaar kijkt, en om te voorkomen dat Bash in een oneindige lus terechtkomt omdat beide ~/.bash_profile
en ~/.bash_login
en dus proberen ~/.profile
opnieuw uit te voeren.
Reacties
- bedankt. Met één belangrijke wijziging werkt je voorgestelde aanpak. Het uitvoeren van
$SHELL -l
veroorzaakte een vorkbom. Blijkbaarbash -l
leest ook.profile
. Als je-l
weglaat, werkt alles zoals verwacht. - Waarschijnlijk omdat je beide niet hebt
~/.bash_profile
en~/.bash_login
? - Zie mijn bewerking van mijn antwoord, waardoor de
if
-instructie mislukt als we ' al Bash draaien. (niet zeker of dit echt nodig is omdat het in plaats daarvan de andere init-bestanden zou moeten ophalen).
ssh [email protected] /bin/bash
heeft ' niet gewerkt?