我希望能够通过桌面上的单个 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”用于重新附加到会话。