Bash

為 ssh 會話指定 shell

  • June 16, 2016

我以使用者身份通過 ssh 登錄到遠端伺服器www-data。伺服器上的使用者www-data將他的預設 shell 設置為/bin/sh,當我登錄時,我得到 dash 作為我的 shell。然後我可以輸入bash並獲取bashshell。

我想在 ssh 登錄時直接登錄 bash。但我不想更改伺服器上的預設 shell。我希望我的更改只影響 ssh 會話。

我試過把command="/bin/bash"我的公鑰放在前面.ssh/authorized_keys,但這有另一個副作用:雖然 bash 在登錄時作為預設 shell 工作,但scp停止工作。我不能再 scp 文件進出 remore 伺服器。

如何在bash不破壞其他應用程序的情況下將其設置為 ssh 會話的預設 shell?

我在我使用的一個系統上遇到了類似的問題(預設 shell 是bash,我想要ksh93chsh但不起作用)。

我的解決方案適用於您的情況,是從Dash 在啟動時讀取exec的所需 shell 。~/.profileBash 不會觸摸~/.profile,除非它沒有找到~/.bash_profileor ~/.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

SSHSSH_TTY在互動式 SSH 會話中設置,因此我們在確保 Bash 可用並執行它之前檢查是否設置了(非空字元串)。我正在設置和導出以防任何其他應用程序查看它,並避免 Bash 由於缺少兩者而SHELL陷入無限循環並因此嘗試再次執行。~/.bash_profile``~/.bash_login``~/.profile

引用自:https://unix.stackexchange.com/questions/290072