ユーザーwww-dataとしてssh経由でリモートサーバーにログインしています。サーバー上のユーザーwww-dataでは、デフォルトのシェルが/bin/shに設定されており、ログインすると、シェルとしてダッシュが表示されます。次に、bashと入力して、bashシェルを取得できます。
bashに直接ログインしたいのはいつですか。 sshでログインします。ただし、サーバーのデフォルトのシェルを変更したくありません。変更はsshセッションにのみ影響します。
 command="/bin/bash" .ssh/authorized_keysの公開鍵の前にありますが、これには別の副作用があります。ログイン時にbashがデフォルトのシェルとして機能しますが、scp動作を停止しました。remoreサーバーとの間でファイルをscpできなくなりました。
  bash他のアプリケーションを壊さずにsshセッションのデフォルトシェルとして? 
コメント
構文。
sshコマンドラインで指定しても。
回答
 1つのシステムで同様の問題が発生します使用します(デフォルトのシェルはbash、ksh93が必要ですが、chshは使用しません
状況に合わせた私の解決策は、から目的のシェルをexecすることです。ダッシュは起動時に読み取ります。 Bashは、~/.bash_profileまたは~/.bash_loginが見つからない限り、~/.profileに触れません。その順序については、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セッションでSSH_TTYを設定するため、 ” Bashが使用可能であることを確認して実行する前に、それが設定されているかどうか(空でない文字列)を再確認します。他のアプリケーションがそれを見る場合に備えて、SHELLを設定およびエクスポートし、両方の~/.bash_profileと~/.bash_loginで、~/.profileを再度実行しようとしています。
コメント
- ありがとうございます。1つの重要な変更を加えるだけで、提案されたアプローチが機能します。$SHELL -lを実行すると、フォーク爆弾が発生しました。どうやら、bash -l.profileも読み取ります。-lを省略すると、すべてが期待どおりに機能します。
- おそらく両方が不足しているためです~/.bash_profileおよび~/.bash_login?
- 私の答えに対する編集を参照してください。これにより、if
がすでにBashを実行している場合、
ステートメントは失敗します(代わりに他のinitファイルを取得する必要があるため、これが本当に必要かどうかはわかりません)。
ssh [email protected] /bin/bashが機能しませんでした'動作しませんか?