怎样从我的桌面通过 ssh 命令在远程服务器上启动屏幕会话?

怎样从我的桌面通过 ssh 命令在远程服务器上启动屏幕会话?

我希望能够通过桌面上的单个 ssh 命令启动远程服务器上的 screen 会话。但是,screen 似乎需要一个终端,而通过 ssh 运行命令时则无法使用终端。

显而易见

ssh [email protected] screen "tail -f /var/log/messages"

(作为一个例子)不起作用,并且给出

Must be connected to a terminal.

我希望 ssh 在屏幕下启动命令,以便我可以稍后登录并附加到我手动启动的屏幕会话。

答案1

尝试使用 -t 选项进行 ssh

ssh -t [email protected] screen "tail -f /var/log/messages"

来自 man ssh

-t 强制分配伪终端。这可用于执行仲裁
        远程机器上的基于屏幕的程序,可以
        非常有用,例如,在实现菜单服务时。多个 -t
        选项强制分配 tty,即使 ssh 没有本地 tty。

答案2

您可以使用:

ssh root@host screen -m -d "tail -f /var/log/messages"

这将启动一个独立的屏幕并在其上运行命令。

   -m   causes screen  to  ignore  the  $STY  environment  variable.  With
        "screen  -m"  creation  of  a  new session is enforced, regardless
        whether screen is called from within  another  screen  session  or
        not.  This  flag has a special meaning in connection with the `-d'
        option:

   -d -m   Start screen in "detached" mode. This creates a new session but
           doesn't  attach  to  it.  This  is  useful  for  system startup
           scripts.

答案3

回答晚了,但这就是我所做的,我创建了一个别名(我们称之为 t)来执行以下操作:

ssh $MYSERVER -a -x -t screen -xRR -A -e^Zz -U -O

这告诉ssh禁用代理和 X11 转发,并告诉screen附加到正在运行的会话,如果需要,启动一个新的会话,用作^Z突破命令,使用 UTF-8 并使终端变得智能。

所有这些意味着我可以打开一个终端,输入t,它将打开我在 $MYSERVER 上的屏幕会话。然后我可以打开另一个终端,执行相同的操作,然后我就会得到同一会话的另一个窗口。

在同一个屏幕会话中有多个终端窗口真是太好了,这样您就可以同时查看两个屏幕选项卡。

答案4

接受的答案适用于执行简单命令,但不适用于执行更复杂的命令(例如使用“&&”运算符的多个命令)。在这种情况下,可能需要使用“sudo”和 shell 调用来调用命令,例如:

ssh -t [email protected] sudo -- "screen bash -c 'test -e /var/log/messages && tail -f /var/log/messages'"

或者仅使用 shell 调用:

ssh -t [email protected] 'screen bash -c "test -e /var/log/messages && tail -f /var/log/messages"'

您还可以考虑在末尾添加“exec bash”以保持会话随后打开,例如:

ssh -t [email protected] 'screen bash -c "test -e /var/log/messages && tail /var/log/messages ; exec bash"'

如果您只想创建远程屏幕会话并在之后立即脱离它,您也可以考虑使用屏幕选项“-d -m”,例如:

ssh -t [email protected] sudo -- "screen -S test123 -d -m bash -c 'test -e /var/log/messages && tail -f /var/log/messages'"

您可以稍后使用以下命令重新连接到远程屏幕会话:

ssh -t [email protected] 'screen bash -c "screen -x test123 ; exec bash"'

屏幕选项“-S test123”用于命名会话,选项“-x test123”用于重新附加到会话。

相关内容