每次通过ssh成功连接到远程主机时,我都想自动运行命令。
我可以使用的第一个连接到每个主机 PermitLocalCommand yes
和 LocalCommand ~/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:对不起,是的。我的意思是每次互动会议(很正常
—
Shabble
ssh foo
,和 ssh foo -t <cmd>
,但不是scp /其他任何没有分配pty的东西。编辑问题澄清。
automatically run a command every time I successfully connect
- 这正是发生的事情。 man 5 ssh_config
说的 ControlMaster
: Enables the sharing of multiple sessions over a single network connection
。所以只有一个连接。大师 ssh
进程创建它(连接),任何连续 ssh
使用它。我明白你想要达到的目标;我的观点是你使用的是“连接”这个词,其中“session”就是你的意思。