specificeer shell voor ssh-sessie

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

  • ssh [email protected] /bin/bash heeft ' niet gewerkt?
  • @DopeGhoti: I ' m ben er ook nieuwsgierig naar, maar ik vermoed dat het ' hetzelfde probleem zal hebben als met zijn

syntax.

  • Ik betwijfel het, aangezien specificatie op de 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. Blijkbaar bash -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).

    Geef een reactie

    Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *