diff --git a/src/libstore/ssh.cc b/src/libstore/ssh.cc index 4f88fa64d..e54f3f4ba 100644 --- a/src/libstore/ssh.cc +++ b/src/libstore/ssh.cc @@ -2,6 +2,16 @@ namespace nix { +void SSHMaster::addCommonSSHOpts(Strings & args) +{ + for (auto & i : tokenizeString(getEnv("NIX_SSHOPTS"))) + args.push_back(i); + if (!keyFile.empty()) + args.insert(args.end(), {"-i", keyFile}); + if (compress) + args.push_back("-C"); +} + std::unique_ptr SSHMaster::startCommand(const std::string & command) { Path socketPath = startMaster(); @@ -23,10 +33,7 @@ std::unique_ptr SSHMaster::startCommand(const std::string throw SysError("duping over stdout"); Strings args = { "ssh", host.c_str(), "-x", "-a" }; - if (!keyFile.empty()) - args.insert(args.end(), {"-i", keyFile}); - if (compress) - args.push_back("-C"); + addCommonSSHOpts(args); if (socketPath != "") args.insert(args.end(), {"-S", socketPath}); args.push_back(command); @@ -73,11 +80,7 @@ Path SSHMaster::startMaster() , "-o", "LocalCommand=echo started" , "-o", "PermitLocalCommand=yes" }; - if (!keyFile.empty()) - args.insert(args.end(), {"-i", keyFile}); - if (compress) - args.push_back("-C"); - + addCommonSSHOpts(args); execvp(args.begin()->c_str(), stringsToCharPtrs(args).data()); throw SysError("starting SSH master"); diff --git a/src/libstore/ssh.hh b/src/libstore/ssh.hh index 72238dad7..b4396467e 100644 --- a/src/libstore/ssh.hh +++ b/src/libstore/ssh.hh @@ -23,6 +23,8 @@ private: Sync state_; + void addCommonSSHOpts(Strings & args); + public: SSHMaster(const std::string & host, const std::string & keyFile, bool useMaster, bool compress)