
SSH経由でユーザーとしてリモートサーバーにログインしていますwww-data
。www-data
サーバーのユーザーはデフォルトのシェルを次に設定/bin/sh
し、ログイン時にダッシュをシェルとして使用します。その後、入ってシェルをbash
得ることができます。bash
SSH経由でログインするときは、Bashに直接ログインしたいと思います。しかし、サーバーのデフォルトシェルを変更したくありません。私の変更はSSHセッションにのみ影響を与えたいと思います。
command="/bin/bash"
に公開鍵を入れようとしましたが、.ssh/authorized_keys
別の副作用がありました。ログイン時にbashがデフォルトのシェルとして機能しましたが、scp
動作が停止しました。 remore サーバーと scp ファイルを転送できなくなりました。
bash
他のアプリケーションを中断せずにSSHセッションのデフォルトシェルを設定するには?
答え1
私が使っていたシステムでも同様の問題がありました(デフォルトのシェルはあり、欲しかったがbash
機能しませんでした)。ksh93
chsh
あなたの場合の私の解決策は、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が利用可能であることを確認し、実行前に設定されていること(空でない文字列)を確認します。他のアプリケーションでは見えないように設定してエクスポートし、SHELL
Bashが両方不足して無限ループに閉じ込められないようにして~/.bash_profile
再実行~/.bash_login
しようとします~/.profile
。