ssh 如何运行命令?

Cyk*_*ker 15 shell ssh

我在客户端和服务器上都使用 Bash。通过 SSH 运行命令时:

  • ssh <host> 'declare' 给出一个 shell 变量列表。

  • ssh <host> 'mount' 给出挂载点列表。

但是,declare是 Bash 内置mount命令,而是外部命令。如果服务器上有一个内置的 shell 和一个同名的外部命令,SSH 如何知道要运行哪个?

Jak*_*uje 21

ssh运行您在远程用户的外壳提供的命令(从所获得的/etc/passwd),作为可见从源代码

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

因此,在远程服务器上为您的示例执行的相应命令是:

  • bash -c declare
  • bash -c mount

它们都被传递给bash和 评估。内置函数在内部进行评估,并调用外部命令,就像您从本地命令行提示符处执行此操作一样。