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へのピギーバックつながるまったく新しい接続ではありません。