【问题标题】:Can I locally retrieve the cwd of a remote shell on the other side of a ssh connection?我可以在 ssh 连接的另一端本地检索远程 shell 的 cwd 吗?
【发布时间】:2017-08-16 14:12:31
【问题描述】:

假设我运行以下命令:

user1@172.50.50.50:~$ ssh user2@172.51.51.51:/Documents
user2@172.51.51.51:~/Documents$ cd ~/Desktop/
user2@172.51.51.51:~/Desktop$ pwd
/home/user2/Desktop

有没有办法让我从 172.50.50.50 上的另一个进程的 ssh 进程的 pid 中获取路径 /home/user2/Desktop?

我想也许它会在/proc/<SSH PID>/ 的某个地方,但我想不通。

【问题讨论】:

  • 你有权限阅读别人的proc目录吗?
  • 客户端根本不存在该信息;正如托比的回答所说,服务器从不通过网络发送它。也就是说,你为什么认为你需要它?有更好的方法来做任何可能依赖于信息的事情(例如,如果您试图从远程驱动一个长时间运行的交互式会话,停止这样做,而是打开一个新的为您想要的每个单独命令通过相同的传输通道,在您启动它时根据该命令更改目录)。
  • (“通道”和“传输”是 SSH 协议术语,但您可以使用 OpenSSH 的 ControlMaster 和 ControlSocket 配置旋钮访问相同的功能)。
  • 另一个相关的事情是当你cd ~/Desktop时,你甚至根本没有改变服务器上ssh进程的工作目录;您只是在更改 ssh 进程启动的 shell 的工作目录。 SSH 服务器不知道 cd 命令对 shell 意味着什么,这不是它的工作——它只是将字符发送到 shell 并读回输出。
  • @CharlesDuffy 我使用 i3 作为我的窗口管理器。我有一个我使用的 bash 脚本,因此当我点击 $mod+Enter 时,它会在当前聚焦的窗口中找到 shell 的 cwd,然后在同一目录中打开一个新终端。当我被 sshed 到另一个盒子时,我希望同样的事情发生。如果我想让它发挥作用,我似乎需要更有创造力。谢谢

标签: bash ssh proc


【解决方案1】:

不,你不能。

SSH 客户端不知道服务器的工作目录。它不会在 SSH 协议中的任何地方传输。事实上,SSH 服务器不需要知道它正在往来传输字符的进程(组)的工作目录。

获得你想要的唯一方法是独立访问服务器主机,找到对应的sshd进程和特定的子进程,然后询问那个子进程。

甚至知道哪个子进程是相关的也不是一件容易的事——您可能在前台、后台或停止中有三四个 shell,可能还有一些编辑器和其他应用程序,它们都具有不同的工作目录。其中哪一项是必需的?

【讨论】:

  • 你能想出什么方法将服务器上的进程与客户端上的进程关联起来吗?
【解决方案2】:

如果你对服务器有足够的权限并且知道 ssh pid,你可以这样做:

ls -l /proc/<SSH PID>/cwd

/proc/&lt;pid&gt;/cwd 是一个符号链接,链接到进程cwd

【讨论】:

  • 抱歉,我很难用语言表达我的问题。从我的示例中 - 我想从 172.50.50.50 上的另一个进程获取路径。在 172.50.50.50,/proc/&lt;SSH PID&gt;/cwd 提供了我调用 ssh 时所在的目录。
猜你喜欢
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 2019-08-01
  • 2019-04-01
  • 1970-01-01
  • 2016-07-19
相关资源
最近更新 更多