ユーザー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
が機能しませんでした'動作しませんか?