让tmux等到我SSH进入,以完成其余的Tmuxinator脚本


13

在最近发现tmux和Tmuxinator之后,我一直在尝试建立要使用的开发环境。

根据协议,我们不允许将密码/密码存储在脚本中。因此,我要寻找的是等待tmux等待SSH隧道建立(提供密码,按输入并登录)。

我知道在tmux 1.8+中有一个“ wait-for”命令。我正在通过Cygwin运行1.9a。但是,即使我已经阅读了文档,也很难理解它。

tmux new-session -s development -n editor -d
tmux split-window -v
tmux split-window -v

"Need to send to all panes.
tmux send-keys -t development 'ssh user@example.com' C-m

因此,这是我所拥有的非常简单的版本。

有什么想法吗?我知道我可以同步会话,但是我仍然在解决这个问题。

编辑:查找命令,然后从窗格中将变量从同步窗格拉到命令。在我弄清楚如何让TMUX提示我输入用户信息之前,这可能是一种“更好”的方法。

可能会发出功能请求。


2
为什么不使用密码就不连接并使用公用/专用密钥?
YoMismo

有人告诉我无法以这种方式进行连接。尽管从技术上我可以做到,但已制定的政策是不可接受的。我也没有声音/权限进行更改(很快?)。因此,就我而言,在研究阻力最小的道路时,这似乎很有希望。
Tango Bravo 2014年

1
我认为远程包装盒未安装tmux?否则,最好将ssh放入远程服务器,然后再启动tmux。//另外,我建议你利用你的~/.ssh/config文件:放Host fooUser userHostname example.com在配置文件中的三个连续行。然后ssh foo变为ssh user@example.com。//也许类似的方法也有帮助:command-prompt -p 'log in as:' -I 'user@example.com' 'split-window -v -d %1; split-window -v -d %1'
damien

Answers:


3

一些注意事项 wait-for

因此,如果您将wait-for的基本用法与线程并发基元类似,则它的用法并不太复杂

它并没有真正连接到其他tmux功能,只是IPC的便捷实现。

wait-for event_name就像等待事件 wait-for -S event_name 是发出事件信号的一种手段

-U-L选项是一种正交的,像信号灯

直接解决您的问题

您可以使用以下wait-for命令解决此类竞争条件,但前提是命令是同步的。

tmux send-keys 'sync-command ; tmux wait-for -S command-finished' C-m
tmux wait-for command-finished

这里的问题是ssh命令不同步:您无法确定它何时完成。

浏览手册,我们可以找到LocalCommand似乎可以满足我们要求的指令:在连接完成后在本地运行命令,以便我们可以调用

ssh root@iris.tatw.name -o 'PermitLocalCommand yes' -o 'LocalCommand  tmux wait-for -S done'

因此,“未连接到其他功能”是指channel仅仅是它自己名称空间中的名称,并且与tmux的预定义“事件”无关?
ormaaj

如果wait-for -S无法保证消息的传递和sync-command之前的完成,可能仍然存在竞赛问题wait-for
ormaaj
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.