Bash
為 ssh 會話指定 shell
我以使用者身份通過 ssh 登錄到遠端伺服器
www-data
。伺服器上的使用者www-data
將他的預設 shell 設置為/bin/sh
,當我登錄時,我得到 dash 作為我的 shell。然後我可以輸入bash
並獲取bash
shell。我想在 ssh 登錄時直接登錄 bash。但我不想更改伺服器上的預設 shell。我希望我的更改只影響 ssh 會話。
我試過把
command="/bin/bash"
我的公鑰放在前面.ssh/authorized_keys
,但這有另一個副作用:雖然 bash 在登錄時作為預設 shell 工作,但scp
停止工作。我不能再 scp 文件進出 remore 伺服器。如何在
bash
不破壞其他應用程序的情況下將其設置為 ssh 會話的預設 shell?
我在我使用的一個系統上遇到了類似的問題(預設 shell 是
bash
,我想要ksh93
,chsh
但不起作用)。我的解決方案適用於您的情況,是從Dash 在啟動時讀取
exec
的所需 shell 。~/.profile
Bash 不會觸摸~/.profile
,除非它沒有找到~/.bash_profile
or~/.bash_login
(按此順序,請參閱 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
SSH_TTY
在互動式 SSH 會話中設置,因此我們在確保 Bash 可用並執行它之前檢查是否設置了(非空字元串)。我正在設置和導出以防任何其他應用程序查看它,並避免 Bash 由於缺少兩者而SHELL
陷入無限循環並因此嘗試再次執行。~/.bash_profile``~/.bash_login``~/.profile