screen/autossh 问题:将 screen 透明地集成到我的 ssh 中的最简单方法?

screen/autossh 问题:将 screen 透明地集成到我的 ssh 中的最简单方法?

我对 screen 和 autossh 还不太熟悉:

我只是希望“完全自动化”我的 ssh 会话,使它们隐式持久,并在我的连接断开时让它们自动恢复。

我尝试过直接使用 screen,但发现它的某些按键(例如 ctrl+a)会干扰我的 shell - 即它们使用相同的按键覆盖 shell/程序功能。有办法解决这个问题吗?

事实上,我根本不想知道屏幕是否正在运行。我只想从终端窗口“ssh”,并让该连接在我的网络断线、笔记本电脑进入睡眠模式等情况下保持持续。

我的要求是否太幼稚?我是否过于简单化了?

答案1

我使用以下设置:

我有一个别名,可以使用 SSH 连接到我选择的服务器,根据需要启动/重新连接屏幕。我还将 Ctrl-A 快捷键重新映射到 Ctrl-Z,因为我很少使用这个快捷键,而且它很容易输入。

alias myscreen='TERM=xterm ssh myserver -a -x -t /opt/local/bin/screen -xRR -A -e^Zz -U -O'

然后我可以打开一个终端并输入myscreen,然后我将连接到myserver。我甚至可以打开多个终端,myscreen多次输入并将多个终端连接到同一个屏幕。我经常使用这个,在一个窗口中显示一个屏幕终端,在另一个窗口中显示另一个屏幕终端。

如果你想自动重新连接,你可以这样做

$ while :; do myscreen; done

甚至

$ while :; do while ! ping -c1 -t1 myserver >/dev/null; do sleep 10; done; myscreen; echo Connection dropped at $(date); sleep 5; done

请注意,以上所有内容都是在 OS X 连接到 Solaris 时进行的,因此 ping 的语法和屏幕的位置可能会有细微的差别。

还有一件事:您可以对屏幕进行相当多的自定义,我特别喜欢我的 .screenrc 的这些部分(在远程端):

# A nice status line at the bottom
hardstatus alwayslastline "%-w%{= BW}%50>%n %t%{-}%+w %<%=|%h"

# special xterm hardstatus: use the window title.
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

# Do not use xterm's alternative window buffer, it breaks scrollback
termcapinfo xterm*|xs ti=\E7\E[?47l

答案2

不确定 autossh 是做什么的。我使用 bash 函数通过 screen 启动 ssh:

ga ()   {
host=$1
if [[ ${host} == "" ]]
    then
    echo "Provide hostname no to connect to."
else
    screen -S ${host} -t ${host} ssh -q -X -l ahumane ${host}
fi
}

它将屏幕的名称设置为 ssh 主机,以便您可以在“screen -ls”中看到它

相关内容