it-swarm.cn

我如何通过台式机上的远程服务器上的ssh命令启动屏幕会话?

我希望能够通过桌面上的单个ssh命令在远程服务器上启动屏幕会话。但是,屏幕似乎需要一个终端,当通过ssh运行命令时该终端不可用。

所以很明显

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

(例如)不起作用,并给出

Must be connected to a terminal.

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

58
Thomas Vander Stichele

尝试使用-t选项来ssh

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

来自man ssh

 -t强制进行伪tty分配。这可用于在远程计算机上执行基于arbi-
暂存屏幕的程序,例如,在实施菜单服务时,此程序非常有用。即使ssh没有本地tty,多个-t 
选项也会强制分配tty。
79
Kjetil Joergensen

您可以使用:

ssh [email protected] 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.
33
Alakdae

答案较晚,但这是我的工作,我为此做了一个别名(我们称其为t):

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

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

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

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

8
w00t

通过将以下内容放入服务器上的〜/ .bashrc文件中,它将在我首次登录服务器时启动屏幕会话,或者如果一个服务器已经在运行,则将其重新连接到该会话。

我觉得这非常方便:

if [ -n "$SSH_CONNECTION" ] && [ -z "$SCREEN_EXIST" ]; then
    export SCREEN_EXIST=1
    screen -DRi
fi
4
Brent