所以很明显
一个示例)不起作用,并给出了
ssh root@my.machine screen "tail -f /var/log/messages"
我希望ssh在屏幕下启动该命令,以便稍后登录并像我将其附加到屏幕一样会议本来可以手动启动的。
#1 楼
尝试对-s选项使用sshssh -t root@my.machine screen "tail -f /var/log/messages"
从man ssh
-t Force pseudo-tty allocation. This can be used to execute arbi- trary screen-based programs on a remote machine, which can be very useful, e.g., when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.
评论
我正在尝试使用tmux ssh -t user @ machine tmux attach进行相同操作,我可以附加一个远程tmux会话,但它会干扰字符编码。它仅显示ascii字符。有解决办法吗?
– Macario
2012年7月31日在8:22
@Macario您可能想为此打开一个单独的问题,尽管在使用ssh -t运行它时与它有切向关系,但听起来更像是与将LC_ *设置为以交互方式运行或以非交互方式运行不同。当您将命令行传递给ssh执行时,它将在非交互式环境中执行。也有可能是在非交互式执行时缺少传递TERM环境变量的情况,在这种情况下,tmux将不知道您的终端实际上具有什么功能,并退回到最小公分母。
– Kjetil Joergensen
2012年8月1日0:34
我没有使用ssh,但面临相同的问题。请帮忙。 serverfault.com/questions/861632/无法在屏幕上运行代码
–张锦州
17年7月11日在21:23
#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.
评论
您的回答同样好,太差了,我必须选择。也许有人应该编辑第一个答案并添加您的信息。
– Thomas Vander Stichele
09年9月9日13:57
这个答案更好,因为它确实可以分离,因此可以让您继续在此终端上工作(并可以从任何其他位置附加到屏幕会话)。
–俄罗斯
20年8月6日在19:07
#3 楼
较晚的答案,但这是我的工作,我为此做了一个别名(叫它t):,并告诉
ssh
附加到正在运行的会话,如果需要的话,开始一个新会话,使用screen
作为Breakout命令,使用UTF-8,并对终端机保持警惕。打开一个终端,键入^Z
,它将在$ MYSERVER上打开我的屏幕会话。然后,我可以打开另一个终端,执行相同的操作,然后我获得另一个窗口进入同一会话。标签同时显示。评论
我通读了好几页,但并没有完全回答我的要求,但您确实做到了。我假设屏幕或tmux这些天可能在大多数服务器上,并且我连接的服务器可能只是暂时的,所以我不想像大多数答案所建议的那样与bashrc混在一起。您也可以在外壳程序中使其成为函数,并接受$ host和$ command之类的参数(将在末尾放置它们)。您可以将其与ssh_config中的主机名结合起来,而不是将别名硬编码为t作为单个主机。
–dragon788
17年6月16日23:40
@ dragon788确实,我现在使其成为一个函数,并用“ $ @”替换了$ MYSERVER。我仍然经常使用这个。
– w00t
17年6月17日在5:19
#4 楼
通过将以下内容放入服务器上的〜/ .bashrc文件中,它将在我首次登录服务器时启动一个屏幕会话,或者如果已经运行,则将其重新连接到该会话。我觉得很方便:
if [ -n "$SSH_CONNECTION" ] && [ -z "$SCREEN_EXIST" ]; then
export SCREEN_EXIST=1
screen -DRi
fi
评论
我尝试了这个,但是当我执行屏幕-ls时,我看不到任何屏幕会话
–塔伦
15-10-23在10:29
评论
顺便说一句,您可以通过错误使用屏幕来解决此错误。我有一个shell函数正在执行exec