ユーザーwww-data
としてssh経由でリモートサーバーにログを記録しています。サーバー上のユーザーwww-data
のデフォルトシェルは/bin/sh
に設定されており、ログインすると、シェルとしてダッシュが表示されます。次に、bash
と入力してbash
Shellを取得します。
Sshでログインするときにbashに直接ログインしたいのですが、サーバーのデフォルトのシェルを変更したくありません。私の変更はsshセッションにのみ影響します。
公開鍵の前にcommand="/bin/bash"
を.ssh/authorized_keys
に入れてみましたが、これには別の副作用があります。ログイン時にbashがデフォルトのシェルとして機能する一方で、scp
が機能しなくなりました。リモアサーバーとの間でファイルをscpできなくなりました。
他のアプリケーションを壊すことなく、bash
をsshセッションのデフォルトのシェルとして設定するにはどうすればよいですか?
使用している1つのシステムで同様の問題があります(デフォルトのシェルはbash
ですが、ksh93
が必要ですが、chsh
が機能しません)。
私の解決策は、あなたの状況に合わせて、exec
~/.profile
から目的のシェルを起動することです。これは、Dashが起動時に読み取るものです。 ~/.profile
または~/.bash_profile
が見つからない場合を除き、Bashは~/.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セッションでSSH_TTY
を設定するため、Bashが使用可能であることを確認して実行する前に、それが設定されているか(空でない文字列)を確認します。他のアプリケーションがそれを見た場合に備えてShell
を設定してエクスポートし、~/.bash_profile
と~/.bash_login
の両方が欠落しているためにBashが無限ループに陥って実行を試みないようにします~/.profile
再び。