我想在通过 登录后运行一些启动命令mosh
。使用ssh
,我会这样做:
ssh server -t 'some startup command'
但是,当我在 mosh 中做类似的事情时,我得到了:
$ mosh elisa2 --ssh="ssh -t 'cat blah'"
Pseudo-terminal will not be allocated because stdin is not a terminal.
/usr/bin/mosh: Could not resolve hostname cat
ssh_exchange_identification: Connection closed by remote host
/usr/bin/mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).
如何在 mosh 中实现与 ssh 类似的行为?
答案1
这种方式几乎不可能,因为 MOSH 本身已经在运行一些命令来在远程服务器上启动其进程。而且按照你的写法,它被解释为服务器名称,这当然是不正确的。
阅读手册页时mosh(1)
(下次开始搜索的好方法),您可以简单地将命令指定为下一个参数:
mosh [options] [--] [user@]host [command...]
所以
$ mosh elisa2 'cat blah'
只需完成工作即可(您不需要关心tty
MOSH)。
通常,您还想运行 shell,因此在 之后cat
应该还有,bash
这样您就会得到提示:
$ mosh elisa2 "cat blah;bash"
答案2
mosh elisa2 -- cat blah
使用--
来阻止 mosh 尝试将命令解析为选项标志。然后它将把之后的任何内容作为登录时运行的命令传递。
但是,上述命令不会启动交互式会话。该命令将运行,然后 mosh 将退出。
要像平常使用 SSH 一样连接到终端仿真器:
ssh user@host -t 'tmux attach || tmux new'
mosh user@host -- 'tmux attach || tmux new'
ssh user@host -t 'screen -R'
mosh user@host -- 'screen -R'