Přihlašuji se na vzdálený server pomocí ssh jako uživatel www-data. Uživatel www-data na serveru má svůj výchozí shell nastavený na /bin/sh a když se přihlásím, zobrazí se jako shell pomlčka. Pak mohu zadat bash a získat bash shell.
Chtěl bych se přihlásit přímo do bash, když I ssh in. Ale já nechci změnit výchozí shell na serveru. Chci, aby moje změna ovlivnila pouze relaci ssh.
Zkoušel jsem vložit command="/bin/bash" infront mého veřejného klíče v .ssh/authorized_keys, ale má to další vedlejší účinek: zatímco při přihlašování funguje bash jako výchozí shell, scp přestal fungovat. Už nemohu scpovat soubory na nebo z remore serveru.
Jak mohu nastavit bash jako výchozí prostředí pro relaci ssh, aniž by došlo k porušení jiných aplikací?
Komentáře
syntaxe.
ssh by nemělo mít na scp. Odpověď
Mám podobný problém v jednom systému Používám (výchozí prostředí je bash, chci ksh93 a chsh to práce).
Mým řešením přizpůsobeným vaší situaci je exec požadovaný shell z ~/.profile, který Dash čte při spuštění. Bash se nedotkne ~/.profile, pokud nenajde ~/.bash_profile nebo ~/.bash_login (v v tomto pořadí, viz příručka 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 nastavuje SSH_TTY v interaktivních relacích SSH, takže my “ znovu zkontrolujeme, zda je nastaven (neprázdný řetězec), než se ujistíte, že je Bash k dispozici, a proveďte jej. Nastavuji a exportuji SHELL v případě, že se na to podívá jakákoli jiná aplikace, a vyhnout se spuštění Bash do nekonečné smyčky kvůli chybějícím ~/.bash_profile a ~/.bash_login a snaží se tak znovu spustit ~/.profile.
Komentáře
- děkuji. S jednou důležitou úpravou váš navrhovaný přístup funguje. Provedení
$SHELL -lzpůsobilo vidličkovou bombu.bash -lčte také.profile. Když vynecháte-l, vše funguje podle očekávání. - Pravděpodobně proto, že vám chybí oba
~/.bash_profilea~/.bash_login? - Podívejte se na moji úpravu mé odpovědi, která
ifprohlášení selže, pokud ' již používáme Bash. (nejste si jisti, zda je to skutečně nutné, protože by místo toho měl vyzvednout další soubory init).
ssh [email protected] /bin/bashnepracoval jsem '?