現在、認証にLDAPを使用するネットワークで作業しています。zsh
ログインシェルに設定した後、まだインストールされてssh
いないように見えるネットワーク上のコンピュータからリモートでアクセスできませんでしたzsh
。ログインが失敗して表示されます。
Dec 8 19:16:11 abert sshd[20649]: User sorokine not allowed because shell /bin/zsh does not exist
したがって、質問は基本的に次のようになります。 LDAPで設定されているものとは異なるログインシェルを使用するようにリモートコンピュータにどのように指示しますか?
OpenSSH_6.0p1 Debian-4+deb7u2, OpenSSL 1.0.1e
ベストアンサー1
一部のシステムでログインシェルが実行されていない場合は、SSHまたは他のほとんどの方法でそのシステムにログインできません。 SSH サーバーは常にログインシェルを実行します。コマンドラインからコマンドを渡すと、ssh
コマンド文字列1を引数として使用してログインシェルが実行されます。-c
それ以外の場合、ログインシェルは引数なしでログインシェルとして実行されます。
ログインシェルをバイパスする方法がある場合、これはセキュリティホールになります。アカウントのログインシェルを1つの特定のタスクのみを実行するプログラムに設定することで、アカウントを制限付きアカウントとして構成できます。git-shell
gitリポジトリへのアクセスのみを許可するrssh
、等。
このコンピュータにログインするには、/bin/zsh
存在するように準備するか、ログインシェルが存在するように変更する必要があります。
このような異機種環境では、/bin/sh
どこにでも存在するログインシェルを使用することをお勧めします。 zshを対話型シェルとして使用できるように、環境変数を(存在する場合)SHELL
に設定します。/bin/zsh
if [ -x /bin/zsh ]; then
export SHELL=/bin/zsh
fi
これにより、ハードコーディングを避けることができますzsh
。
if SHELL=$(command -v zsh); then
export SHELL
else
unset SHELL
fi
テキストモードログイン用にzshを自動実行するには.profile
。.zprofile
存在しないので推奨しません)。対話型ログインの場合にのみこれを実行し、.profile
スクリプトによって実行されるか、GUIモードのログイン中に実行しないでください。
if case $- in *i*) true;; *) false;; esac && # interactive shell
[ -z "$ZSH_VERSION" ] && # not running zsh yet
type zsh >/dev/null 2>/dev/null; then # zsh is present
exec zsh
fi
1 SSH クライアントは、オプションではなく引数を中間スペースに関連付け、結果の文字列を接続を介して送信します。 SSHプロトコルは、コマンドを文字列リストではなく文字列として定義します。