当我使用 PuTTY (Windows XP) 连接时,我的 ISP 的 SSH 服务器 (Debian 2.0) 在 35 分钟不活动后将我注销。当我使用该服务器进行端口转发时,这是一个大问题。终端中显示的最终消息:
This terminal has been idle 30 minutes. If it remains idle
for 5 more minutes it will be logged out by the system.
Logged out by the system.
PuTTY 选项不是帮助:
- 发送空数据包以保持会话处于活动状态。保持活动间隔秒数(0 表示关闭):30
- [x] 启用 TCP 保持连接 (SO_KEEPALIVE 选项)
知道如何避免自动注销吗?我应该尝试另一个 SSH 客户端吗?
答案1
当你只需要端口转发时,你可以尝试完全禁用启动shell,并禁用分配伪终端。然后终端就不能再闲置了。:-)
如果你的 ISP 不允许这样做,你可以在 shell 会话中运行这样的脚本
while sleep 60; do
echo "Still there"
done
这样终端就会显示活动并且不应被注销。
但这取决于他们使用的操作系统,哪个选项有用。你没有告诉我们,是吗?uname -a
是你的朋友。
答案2
您在服务器上使用哪种 shell?
您可以尝试完全不使用 shell 进行登录,方法是勾选Connection
→ SSH
→ Don't start a shell or command at all
,或者您可以尝试运行不同的 shell 并确保它没有启用自动注销功能。
例如,尝试运行tcsh
并通过执行确保autologout
未设置unset autologout
。
答案3
我有一个简单的 AutoHotkey 脚本来处理从 Windows 打开的任何 Telnet/SSH 会话。它可能会帮助某些人:
SetTitleMatchMode 2 ; 2 - partially, 3 - exact match
MyWinTitle=- PuTTY ; Describe the window for keep alive signals
Timeout=180000 ; Call KeepAlive every 180 seconds (180000 ms)
ttl := Timeout / 1000
ToolTip, Keepalives every '%ttl%' seconds for the last touched '%MyWinTitle%' window`nTo stop the keepalive press F12
SetTimer, RemoveToolTip, 3000 ; Shows the tooltip for 5 seconds
return
RemoveToolTip:
SetTimer, RemoveToolTip, Off ; only once
ToolTip
Gosub, MyKeepAlive
Return
MyKeepAlive:
WinGetActiveTitle, Title
IfWinExist, %MyWinTitle%
{
WinActivate
WinGet, mywin_id
WinGetActiveTitle, mywin_title
Send {!}{BS}
MsgBox,,Info message, The window for keep-alives is '%mywin_title%',3
WinActivate, %Title%
}
else
{
MsgBox,,Exit message, Open the window first!,10
ExitApp
}
SetTimer, KeepAlive, %Timeout%
Return
KeepAlive:
WinGetActiveTitle, Title
WinGetTitle, current_title, ahk_id %mywin_id%
If current_title = %mywin_title%
{
WinActivate, ahk_id %mywin_id%
Send {!}{BS}
WinActivate, %Title%
}
else
{
MsgBox,,Exit message, The window was closed!,10
ExitApp
}
Return
Return
F12::ExitApp ; Exit button
答案4
看起来服务器在协议级别强制执行超时,并明确忽略空数据包,这些空数据包通常用于在超时的情况下保持连接处于活动状态。不幸的是,这意味着您可能无法通过客户端选项执行任何操作。
您可以尝试安排会话中的某些内容不断更新,例如使用byobu
(或tmux
或screen
直接)并安排更新时钟位于状态栏中,这是大多数 Linux 发行版的标准配置中的默认设置byobu
。
如果不使用这样的屏幕显示管理器,您可以尝试运行 SSH 会话中自动更新的任何东西以使其保持隧道活动,例如watch -n 10 date
。