diff --git a/src/libstore/ssh.cc b/src/libstore/ssh.cc index 4f88fa64dbd1865ed1ec3236136b03f319d42f51..e54f3f4ba2840718e11e6390a5926ffaed013437 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<Strings>(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::Connection> SSHMaster::startCommand(const std::string & command) { Path socketPath = startMaster(); @@ -23,10 +33,7 @@ std::unique_ptr<SSHMaster::Connection> 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 72238dad79ab7d6b13a37ff5190ce3fbd76e10b6..b4396467e54eed3eef10a40e8ce1026652b3b1cc 100644 --- a/src/libstore/ssh.hh +++ b/src/libstore/ssh.hh @@ -23,6 +23,8 @@ private: Sync<State> state_; + void addCommonSSHOpts(Strings & args); + public: SSHMaster(const std::string & host, const std::string & keyFile, bool useMaster, bool compress)