如何对现有 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,因为远程用户现在是root

不,远程用户现在是 root。您在本地系统上完成的操作sudo -s并不会改变您soyuka远程 ssh 进入帐户的事实。

“在这里我想获取/home/soyuka/downloads”的答案是类似的。

是否可以通过套接字在当前 ssh 会话上执行命令?

我相信您可能有一个误解,认为存在持久的长寿命 SSH 会话。事实上,每次你这样做时:

ssh -l remoteuser host some-command

...A新的SSH 会话打开,some-command在该会话中执行(没有 pty,与未指定远程命令打开的 SSH 会话不同),然后关闭该会话。

即使存在这样一个持久的远程会话,也没有理由期望在本地执行诸如sudo或 之类的操作cd会以任何方式影响该远程会话。

您使用 SSH 控制套接字这一事实根本不会改变这一点。与普通会话相比,从属 SSH 会话的唯一不同之处在于 SSH会议搭载于现有的 SSH联系而不是全新的连接。

相关内容