ssh:他のシェルに非対話型コマンドを実行させる

ssh:他のシェルに非対話型コマンドを実行させる

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

おすすめ記事