SSHクライアントはリモートシステムで実行されている既存のシェルに接続できますか?

SSHクライアントはリモートシステムで実行されている既存のシェルに接続できますか?

リモートコンピュータにSSHとして接続するたびに、常に新しいリモートシェルが作成されます。

SSHクライアントはリモートシステムで実行されている既存のシェルに接続できますか?

答え1

いいえ、SSHクライアントは既存の実行中のシェルに接続できません。

これセキュアシェル接続プロトコル対話型セッションを次のように指定します。

セッションはプログラムのリモート実行です。計画は次のとおりです。

  • 地獄のように、
  • 申請書、
  • システムコマンド、
  • またはいくつかの組み込みサブシステム。

tty がある場合と存在しない場合、X11 転送が含まれる場合も含まれない場合もあります。複数のセッションを同時にアクティブにすることができます。

引き続き次のように明らかにしています。シェルまたはコマンドの開始(私のハイライト):

セッションが構成されると、プログラムが開始されます。スタート最後に。プログラムは、ホストに依存しない名前のシェル、アプリケーション、またはサブシステムです。チャンネルごとに1つのリクエストしか成功できません。

その後、ドキュメントはクライアントが要求を実行する方法を説明します(再び強調します)。

  • 「ユーザーのデフォルトシェル(通常はUNIXシステムの/ etc / passwdで定義されています)を要求する」「シェル」スタート反対側から」または
  • "exec","サーバーを要求しますスタート与えられたコマンドを実行します。 「または
  • 「サブシステム」、「事前定義されたサブシステムの実行」(例:sftp)

したがって、SSH接続は新しいシェルのみを開始できます。

あるコメントが指摘したように、シミュレーションリモート側またはセッションを作成して既存のシェルに接続しscreen(新しい$ SHELLインスタンスを作成します)、そのリモートシステムに接続してから、新しいシェルまたはコマンドを使用して既存のセッションに接続すること。tmuxsshscreentmux

答え2

はい、しかし数年前は不可能でした。近年、LinuxカーネルにはeBPFという新機能が導入されました。 SSHログ(https://github.com/sshlog/agent)デーモンがプロセス全体を受け取り、他のユーザーのSSHセッションに接続できるようにするために使用されます。

インストール後、まずコマンドを実行して、サーバー上のすべてのアクティブ・セッションをリストします。

mhill@devlaptop:~$ sshlog sessions
  
 User        Last Activity             Last Command               Session Start              Client IP           TTY
mhill           just now              /usr/bin/gcc             2023-04-10 16:16:18        127.0.0.1:58668         17
billy          10 min ago            /usr/sbin/fdisk           2023-04-10 12:11:05        15.12.5.8:58669         32

そしてそこに以下を追加してください:

mhill@devlaptop:~$ sshlog attach 32

Attached to TTY 32.  Press CTRL+Q to exit

billy@devlaptop:~$ 

これで、このリモートシェルを他のユーザー/セッションと共有しています。自分のセッションと同様にコマンドを実行できます。

関連情報