ssh
リモートサーバーを介して非対話型コマンドを実行するために特定のシェルを強制的に使用するにはどうすればよいですか?
リモートサーバーのデフォルトシェルですが、指定されたzsh
コマンドを実行するにはそれを使用する必要があります/bin/sh
。次のコマンドを実行すると、期待どおりに実行さfoo
れます。zsh
ssh -tq -l root -o LogLevel=ERROR remote-server "foo"
指定しようとしましたが、/bin/sh -c "foo"
これによりzsh
起動/bin/sh
と実行のみが発生しますfoo
。
/bin/sh
パスせずに直接使用する必要があります。zsh
ssh
他のシェルを定義するオプションやローカルまたはリモート設定はありますか?
すべての非対話型コマンド(非ログインシェル)に対して異なるシェルを設定できますか?
答え1
設計上、ログインシェルをバイパスすることは不可能です。制限されたシェル(rsh/rksh/rbash/…など)の制限付きシェル、または特定のプロトコルのみを許可するシェル(rsshやgit-shellなど)を使用してSSHアカウントを設定できます。クライアントは他のシェルを指定できません。
別のシェルでコードを実行するには、ログインシェルでシェルを実行し、コードを内部シェルに渡す必要があります。これは、他の言語(Perl、Pythonなど)で解釈されたコードを実行するために実行する必要がある操作と変わりません。正確に引用してください。標準入力が必要ない場合は、標準入力にスクリプトを渡すことでネストされた参照は必要ありません。
同じアカウントのユーザーデータベースに複数のエントリがある可能性があります。 「同じアカウント」とは、同じユーザーIDを意味します。アイテムにはユーザー名が異なる必要があり、パスワード、シェルなどが異なる場合があります。よりユーザーアカウントに複数のパスワードを割り当てることはできますか?。一部のプログラムは、ユーザーID($USER
ユーザーがログインしたときに選択した名前に設定された環境変数のユーザー名ではありません)から照会するため、これは信頼できません。
インタラクティブな使用のためにzshをしたいのですが、BourneスタイルのSSHシェルが必要な場合は、私がしたことをすることができます。ログインシェルを/bin/sh
(またはPOSIXシェルが必要なすべての項目)に設定し(より複雑なバージョン)を使用しますexport SHELL=/bin/zsh; exec $SHELL
。私の.profile
。