我对 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”中看到它