sshはどのようにコマンドを実行しますか?


15

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

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

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

ただし、declareBashビルトインである一方mount、外部コマンドです。サーバーに同じ名前のシェル組み込みコマンドと外部コマンドがある場合、SSHはどの方法を実行するのかをどのように判断しますか?


2
sshは常にシェルを実行します/etc/passwd。これはに保存されています。それはだ場合/usr/sbin/nologin、あなたはログインできません。
IPOR Sircer

回答:


21

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評価されます。組み込みは内部で評価され、外部コマンドは、ローカルコマンドラインプロンプトから実行するかのように呼び出されます。


シェルが常にsshデーモンによって起動される場合、ユーザーがコマンドでsshを呼び出すと、ユーザーが何らかのログインを実行したとしても、そのシェルはログインシェルではありません。何か案が?
サイカー16

はい。コマンドを実行するシェルは1)ログインシェルなし2)対話型ではありません。-tスイッチによってインタラクティブ機能を強制できますが、rcファイルはロードされません。
Jakuje

1
(クライアント)sshdではなく、ssh(サーバー)がこれを行っていることに注意してください。
ysdx 16

@ysdx彼らは一緒に働いています。クライアントは、シェルを介してコマンドを実行するようサーバーに指示し、サーバーが実行します。
バーマー16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.