我们的 $HOME 文件系统是一个 openAFS 系统。我从家里的笔记本电脑登录到我的台式机,想要运行一项长时间的工作。因此,为了防止会话中断,我打开
screen -S session_name
并从那里运行脚本,然后断开屏幕会话。我的问题是,在相对较短的几个小时后,会话失去了与 AFS 文件系统的联系,因此我无法使用 $HOME 上存储的脚本中的任何文件。如果我稍后重新连接到会话,我无法列出其中的任何文件或将目录更改为我的主目录,我只会收到权限被拒绝的错误。
我尝试了以下命令来尝试重新连接,如果我登录桌面的时间太长,这通常会起作用:
fs checkservers
fs checkvolumes
fs flush
但这无助于屏幕会话重新连接。有谁知道如何在断开连接的屏幕会话中保持对 AFS 的访问,或者在我的 bash/python 脚本中放置命令以使其保持活动状态?
答案1
我建议运行krenew
,它可以选择使用 -t 标志运行命令,默认情况下为aklog
。它通常被打包为启动包裹。
运行krenew
屏幕内部会话。确保你得到可再生Kerberos 票证和您的机构 KDC 可能对您的票证续订时间有限制。只要 Kerberos 票证有效,krenew 就会运行 aklog 并获取更新的令牌。
如果您想长期保留票证,请确保每次登录时凭证缓存都是相同的(例如,使用 KEYRING),这样每次您 ssh 登录时,krenew 进程都可以访问刷新后的 tgt。您可以在 /etc/krb5.conf 中设置默认 ccache 名称。
我基本上使用 tmux 来完成此操作,并且我还使用kAFS客户端以及用于主目录的 OpenAFS。
答案2
所以这是今天建议我尝试的解决方案。
首先通过 ssh 登录到有问题的计算机
然后运行以下命令创建新的 kerberos/AFS 会话。
pagsh
运行以下命令再次使用 AFS 进行身份验证
klog
使用以下命令验证您是否拥有令牌
tokens
使用 -l 选项运行 screen 以强制登录 shell
screen -l -S session_name
启动您的应用程序并断开连接...到目前为止它似乎有效。