Я запускаю сервер OpenSSH в Windows. и перенаправил порт 22.
Мой код делает что-то вроде этого:
- Я получаю JSON от вызов, я создаю нового пользователя и каталог с тем же именем, что и имя пользователя.
- В новом каталоге ключ публикации вставляется в .ssh/authorized_keys.
< /li>
Затем я инициализирую чистый репозиторий git с тем же путем, что и repo_path. Полный путь будет выглядеть примерно так: «C:/Users/username/repopath1/repopath2.git».
{
error: "couldn't push to hax@(my ip):soft/scene.git - sorry, but we have no further details, check your server logs

debug: { attempted_repo_url: 'hax@(my ip):soft/scene.git' }
}
Дело в том, что когда я пытаюсь подключиться по ssh локально, проблем с ключом паба или чего-то в этом роде не возникает. Однако есть одна странная вещь: я могу подключиться к локальному хосту по ssh, но если я попытаюсь подключиться по ssh к своему общедоступному IP-адресу, он не подключится, хотя я подтвердил, что порт 22 доступен для обнаружения на canyouseeme.org, и проверка связи с моим общедоступным IP-адресом тоже работает.
Я думаю, что это может быть проблема, связанная с разрешениями или неправильной настройкой между git и ssh, но я застрял на этом уже два дня и мне отчаянно нужна помощь.

Длинная строка кода для подробностей:
export const solve = async (problem: TProblem): Promise => {
try {
const { push_token, username, repo_path } = problem;
const url = `${BASEURL}/_/git/${push_token}`;
const repo_host = PUBLIC_IP;
const repoDir = await prepareDir(problem);
await prepareGit({ repoDir, repo_host, username, repo_path });
await setPermissions({ repoDir, username });
const response = await axios.post(url, {
repo_host,
});
console.log(response.data);
const secret = (await fs.readFile(path.join(repoDir, "solution.txt"))).toString();
return {
secret,
};
} catch (e) {
console.error(e);
throw e;
}
};
const setPermissions = async ({ repoDir, username }: PermissionParams) => {
try {
const ownership = await exec(`icacls "${repoDir}" /setowner "${username}"`);
await exec(`icacls "${repoDir}" /reset`);
await exec(`icacls "${repoDir}" /grant "${username}:(F)"`);
await exec(`icacls "${repoDir}" /inheritance:r`);
return ownership.stdout;
} catch (e) {
console.error(e);
throw e;
}
};
const prepareGit = async ({ repoDir, repo_host, username, repo_path }: GitParams) => {
try {
const remote = `${username}@${repo_host}:${repo_path}`;
const options: Partial = {
baseDir: repoDir,
binary: "git",
maxConcurrentProcesses: 6,
trimmed: true,
};
const git: SimpleGit = simpleGit(options);
const init = await git.init(true);
return init;
} catch (e) {
console.error(e);
throw e;
}
};
const prepareDir = async (problem: TProblem) => {
try {
const { repo_path, ssh_key, username } = problem;
const userDir = path.join(ROOT_DIR, username);
const sshDir = path.join(userDir, ".ssh");
const repoDir = path.join(userDir, repo_path);
const authKeyPath = path.join(sshDir, "authorized_keys");
await fs.mkdir(repoDir, { recursive: true });
await fs.writeFile(authKeyPath, ssh_key);
return repoDir;
} catch (e) {
console.error(e);
throw e;
}
};
Подробнее здесь: https://stackoverflow.com/questions/793 ... oing-wrong