SSHセッションのシェルの指定

SSHセッションのシェルの指定

SSH経由でユーザーとしてリモートサーバーにログインしていますwww-datawww-dataサーバーのユーザーはデフォルトのシェルを次に設定/bin/shし、ログイン時にダッシュをシェルとして使用します。その後、入ってシェルをbash得ることができます。bash

SSH経由でログインするときは、Bashに直接ログインしたいと思います。しかし、サーバーのデフォルトシェルを変更したくありません。私の変更はSSHセッションにのみ影響を与えたいと思います。

command="/bin/bash"に公開鍵を入れようとしましたが、.ssh/authorized_keys別の副作用がありました。ログイン時にbashがデフォルトのシェルとして機能しましたが、scp動作が停止しました。 remore サーバーと scp ファイルを転送できなくなりました。

bash他のアプリケーションを中断せずにSSHセッションのデフォルトシェルを設定するには?

ベストアンサー1

私が使っていたシステムでも同様の問題がありました(デフォルトのシェルはあり、欲しかったがbash機能しませんでした)。ksh93chsh

あなたの場合の私の解決策は、Dashが起動時に読み取る必要なexecシェルをDashから取得することです。 Bashはorが見つからない限り~/.profile触れません(手順についてはBashマニュアルを参照してください)。~/.profile~/.bash_profile~/.bash_login

# 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_TTYインタラクティブSSHセッションで確立されるため、Bashが利用可能であることを確認し、実行前に設定されていること(空でない文字列)を確認します。他のアプリケーションでは見えないように設定してエクスポートし、SHELLBashが両方不足して無限ループに閉じ込められないようにして~/.bash_profile再実行~/.bash_loginしようとします~/.profile

おすすめ記事