sshセッションのシェルを指定します

ユーザー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 [email protected] /bin/bashが機能しませんでした'動作しませんか?
  • @DopeGhoti:I ' mまた、それについても興味がありますが、'彼の

構文。

  • sshコマンドラインで指定しても
  • 回答

    1つのシステムで同様の問題が発生します使用します(デフォルトのシェルはbashksh93が必要ですが、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ファイルを取得する必要があるため、これが本当に必要かどうかはわかりません)。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です