SSH経由でコマンドを実行するには?

SSH経由でコマンドを実行するには?

私はクライアントとサーバーの両方でBashを使用しています。 SSH経由でコマンドを実行する場合:

  • ssh <host> 'declare'シェル変数のリストを提供します。

  • ssh <host> 'mount'マウントポイントのリストを提供します。

しかし、declareこれはBashの組み込みコマンドmountですが、外部コマンドです。同じ名前の組み込みシェルと外部コマンドがサーバーに存在する場合、SSHはどのコマンドを実行するかをどのように知ることができますか?

答え1

ssh次のように、リモートユーザーのシェル/etc/passwdから提供されたコマンドを実行します。ソースコード:

argv[0] = (char *) shell0;
argv[1] = "-c";
argv[2] = (char *) command;
argv[3] = NULL;
execve(shell, argv, env);

したがって、あなたの例では、リモートサーバーで実行する対応するコマンドは次のようになります。

  • bash -c declare
  • bash -c mount

それらはすべて渡され、bash評価されます。組み込みコマンドは内部的に評価され、ローカルコマンドラインプロンプトで実行したように外部コマンドを呼び出します。

関連情報