From e356796fc7ee493ff6b6a7e9cbcbc2971ab23729 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 26 Oct 2016 16:41:34 -0400 Subject: Run ssh with ServerAliveInterval 60 So that stalled transfers will be noticed within about 3 minutes, even if TCPKeepAlive is disabled or doesn't work. Rather than setting with -o, use -F with another config file, so that any settings in ~/.ssh/config or /etc/ssh/ssh_config overrides this. --- Annex/Ssh.hs | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'Annex/Ssh.hs') diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs index 4f879436b..43c2c13a9 100644 --- a/Annex/Ssh.hs +++ b/Annex/Ssh.hs @@ -33,6 +33,7 @@ import qualified Git.Url import Config import Annex.Path import Utility.Env +import Utility.Tmp import Types.CleanupActions import Git.Env #ifndef mingw32_HOST_OS @@ -49,13 +50,33 @@ sshOptions (host, port) gc opts = go =<< sshCachingInfo (host, port) go (Just socketfile, params) = do prepSocket socketfile ret params - ret ps = return $ concat - [ ps - , map Param (remoteAnnexSshOptions gc) - , opts - , portParams port - , [Param "-T"] - ] + ret ps = do + overideconfigfile <- fromRepo gitAnnexSshConfig + -- We assume that the file content does not change. + -- If it did, a more expensive test would be needed. + liftIO $ unlessM (doesFileExist overideconfigfile) $ + viaTmp writeFile overideconfigfile $ unlines + -- ssh expands "~" + [ "Include ~/.ssh/config" + -- ssh will silently skip the file + -- if it does not exist + , "Include /etc/ssh/ssh_config" + -- Everything below this point is only + -- used if there's no setting for it in + -- the above files. + -- + -- Make sure that ssh detects stalled + -- connections. + , "ServerAliveInterval 60" + ] + return $ concat + [ ps + , [Param "-F", File overideconfigfile] + , map Param (remoteAnnexSshOptions gc) + , opts + , portParams port + , [Param "-T"] + ] {- Returns a filename to use for a ssh connection caching socket, and - parameters to enable ssh connection caching. -} -- cgit v1.2.3