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 -l
způ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_profile
a~/.bash_login
? - Podívejte se na moji úpravu mé odpovědi, která
if
prohláš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/bash
nepracoval jsem '?