使用ssh多路复用时,在每次成功连接时调用本地命令?


4

每次通过ssh成功连接到远程主机时,我都想自动运行命令。

我可以使用的第一个连接到每个主机 PermitLocalCommand yesLocalCommand ~/bin/ssh-notify-me 在我的条目 ~/.ssh/config, 相近 这个答案 但我也使用了一个非常积极的ssh多路复用配置(大致如下):

Host *
PermitLocalCommand yes
ServerAliveCountMax 2
ServerAliveInterval 5
ControlPath ~/.ssh/mux/%r@%h:%p
ControlMaster auto
ControlPersist 1h

使用此设置,LocalCommand仅在控制主/ mux套接字存在之前执行第一次连接。此后,我连接,但命令不运行。

是否有任何方法(不禁用多路复用)确保为每个打开的新交互式会话发生LocalCommand或某些等效操作?

包皮 ssh shell函数或脚本中的二进制文件似乎不起作用,因为它无法知道连接是否成功,直到它完成。


当您说“每个新会话”时,这仅仅意味着交互式会话(您在远程服务器上获得命令行提示)吗?或者它包括非交互式会话? scp会话怎么样? sftp会话?该命令是否产生输出到终端?
Kenster

@Kenster:对不起,是的。我的意思是每次互动会议(很正常 ssh foo,和 ssh foo -t <cmd>,但不是scp /其他任何没有分配pty的东西。编辑问题澄清。
Shabble

automatically run a command every time I successfully connect - 这正是发生的事情。 man 5 ssh_config 说的 ControlMasterEnables the sharing of multiple sessions over a single network connection。所以只有一个连接。大师 ssh 进程创建它(连接),任何连续 ssh 使用它。我明白你想要达到的目标;我的观点是你使用的是“连接”这个词,其中“session”就是你的意思。
Kamil Maciorowski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.