В зависимости от вашей модели угроз, возможно, вы можете обойтись без установки переменных среды через /usr/bin/env
?
Это будет выглядеть примерно так:
std::vector<std::string> strArgs = {
"ssh",
"remote-server",
"env",
"MONGODB_USERNAME=" + mongo_username,
"MONGODB_PASSWORD=" + mongo_password,
"mongo"
};
// Convert std::vector<std::string> into char**
std::vector<char*> cArgs;
for (auto& str : strArgs) {
cArgs.emplace_back(str.c_str());
}
execv("/usr/bin/ssh", (const char **)&cArgs.front());