既存のSSHセッションでリモートコマンドを実行する方法

既存のSSHセッションでリモートコマンドを実行する方法

SSH接続を介してローカルコンピュータに関する基本情報を取得しようとしています。ここでの目的は、私のtmuxステータスバーから現在のユーザー、ホスト名、および現在の作業ディレクトリを取得することです。

私はControlMasterそれを活性化しました~/.ssh/config

Host *
  ControlMaster auto
  ControlPath ~/.ssh/socket-%r@%h:%p

これで、ホームブレンドのtmuxプラグインから正常にインポートされ、ControlPathソケットを介してコマンドを送信できます。

echo $(ssh -S ~/.ssh/socket-$user@$host:$port $host "$command")

これは、リモートホスト名とユーザーを取得するのにうまく機能します。問題は、リモートユーザーを変更してもwhoamiログインに使用したユーザーが引き続き返されることです。

たとえばwhoami~ローカルで、>SSHセッションで実行されます):

~ ssh soyuka@host
> whoami
  soyuka
~ ssh -S ~/.ssh/socket-soyuka@host:22 host whoami
  soyuka

> sudo -s
> whoami
  root

~ ssh -S ~/.ssh/socket-soyuka@host:22 host whoami
  soyuka #Here I want to get root because the remote user is now root

たとえばpwd~ローカルで、>SSHセッションで実行されます):

~ ssh soyuka@host
~ ssh -S ~/.ssh/socket-soyuka@host:22 host pwd
  /home/soyuka

> cd downloads
> pwd
  /home/soyuka/downloads

~ ssh -S ~/.ssh/socket-soyuka@host:22 host pwd
  /home/soyuka #Here I want to get /home/soyuka/downloads

ソケットを介して現在のSSHセッションでコマンドを実行できますか?

ベストアンサー1

あなたが求めるのは言葉にならないようです。

ここでは、リモートユーザーは現在ルートなので、ルートを取得したいと思います。

いいえ、今リモートユーザーはrootです。ローカルシステムで実行する操作は、リモートでアカウントにSSHでアクセスするという事実をsudo -s変更しません。soyuka

「ここで/home/soyuka/downloadsを取得したい」という答えは似ています。

ソケットを介して現在のSSHセッションでコマンドを実行できますか?

持続的で長続きするSSHセッションがあるという誤解があるかもしれません。実際、これを行うたびに:

ssh -l remoteuser host some-command

...ㅏ新しいSSHセッションが開き、some-commandそのセッションで実行され(リモートコマンドを指定せずに開かれたSSHセッションとは異なり、ptyなしで)セッションが閉じます。

sudoこのような永続的なリモートセッションが存在しても、ローカルで作業を実行することが、cdどのような方法でもそのリモートセッションに影響を与えると期待する理由はありません。

ソケットを制御するためにSSHを使用するという事実は、これをまったく変更しません。スレーブSSHセッションと通常セッションの唯一の違いはSSHです。会議既存のSSHへのピギーバックつながるまったく新しい接続ではありません。

おすすめ記事