<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Git&#x2F;SSH: Permission denied (publickey) — как настроить доступ без ошибок]]></title><description><![CDATA[<p dir="auto">Часто при работе с Git через SSH выдает ошибку <strong>Permission denied (publickey)</strong>. Это значит, что сервер, вроде GitHub, не принимает ваш ключ для аутентификации. В этой статье разберем, как диагностировать проблему и настроить доступ шаг за шагом.</p>
<p dir="auto">Настройка SSH-ключа решает 90% таких случаев. Вы научитесь генерировать ключи, добавлять их правильно и проверять соединение. Это сэкономит часы на отладку и позволит клонировать репозитории без паролей.</p>
<h2>Что значит ошибка Permission denied (publickey)</h2>
<p dir="auto">Ошибка <strong>Permission denied (publickey)</strong> возникает, когда SSH-сервер отклоняет подключение из-за проблем с ключами. Обычно это GitHub или ваш сервер, который ожидает публичный ключ, но не находит его или не может его прочитать. Например, при команде <code>git clone git@github.com:username/repo.git</code> терминал выдает предупреждение о хосте и потом fatal-ошибку.</p>
<p dir="auto">Сервер проверяет ваш приватный ключ локально и сравнивает с публичным на своей стороне. Если ключ не загружен в ssh-agent, права доступа неверные или ключ не добавлен в аккаунт — доступ блокируется. Реальные примеры: на Ubuntu после <code>git clone</code> падает с IP GitHub в known_hosts, но без аутентификации. На Windows в Git Bash то же самое, если ssh-agent не запущен.</p>
<p dir="auto">Вот типичные причины в таблице:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Причина</th>
<th>Симптом</th>
<th>Пример</th>
</tr>
</thead>
<tbody>
<tr>
<td>Нет ключа</td>
<td><code>ssh-add -l</code> пустой</td>
<td><code>The agent has no identities</code></td>
</tr>
<tr>
<td>Ключ не в GitHub</td>
<td><code>ssh -T git@github.com</code> fails</td>
<td><code>Permission denied (publickey)</code></td>
</tr>
<tr>
<td>Неправильные права</td>
<td>chmod не 600</td>
<td>Доступ к ~/.ssh/id_rsa запрещен</td>
</tr>
<tr>
<td>ssh-agent не запущен</td>
<td>В Git Bash</td>
<td>Agent pid не стартует</td>
</tr>
</tbody>
</table>
<ul>
<li><strong>Проверьте наличие ключей</strong>: Запустите <code>ssh-add -l -E sha256</code> — увидите список или ошибку.</li>
<li><strong>Запустите ssh-agent</strong>: <code>eval "$(ssh-agent -s)"</code> — это фоновая служба для ключей.</li>
<li><em>Нюанс</em>: На macOS или Linux используйте <code>ssh-add ~/.ssh/id_rsa</code> после запуска.</li>
</ul>
<h2>Генерация и добавление SSH-ключа в GitHub</h2>
<p dir="auto">Сначала убедитесь, что у вас есть пара ключей: приватный (секретный) и публичный (.pub). Если нет, сгенерируйте их командой <code>ssh-keygen -t ed25519 -C "your_email@example.com"</code>. Нажмите Enter три раза для дефолтных настроек — файлы появятся в ~/.ssh/.</p>
<p dir="auto">Публичный ключ нужно добавить в GitHub, иначе сервер его не узнает. Скопируйте содержимое <code>cat ~/.ssh/id_ed25519.pub</code> (или id_rsa.pub) и перейдите в настройки аккаунта: Settings &gt; SSH and GPG keys &gt; New SSH key. Вставьте ключ, дайте название и сохраните. Это базовый шаг, который решает проблему в большинстве случаев.</p>
<p dir="auto">После добавления протестируйте:</p>
<ol>
<li>Запустите ssh-agent: <code>eval "$(ssh-agent -s)"</code>.</li>
<li>Добавьте ключ: <code>ssh-add ~/.ssh/id_ed25519</code>.</li>
<li>Проверьте связь: <code>ssh -T git@github.com</code> — должно ответить “Hi username! You’ve successfully authenticated”.</li>
</ol>
<p dir="auto"><em>Важно</em>: Если используете RSA, берите 4096 бит: <code>ssh-keygen -t rsa -b 4096</code>. Для старых систем ed25519 лучше, но проверьте совместимость.</p>
<p dir="auto">Таблица сравнения типов ключей:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Тип</th>
<th>Команда</th>
<th>Преимущества</th>
<th>Недостатки</th>
</tr>
</thead>
<tbody>
<tr>
<td>Ed25519</td>
<td><code>-t ed25519</code></td>
<td>Быстрый, безопасный</td>
<td>Не везде поддержка</td>
</tr>
<tr>
<td>RSA</td>
<td><code>-t rsa -b 4096</code></td>
<td>Универсальный</td>
<td>Медленнее</td>
</tr>
</tbody>
</table>
<ul>
<li><strong>Скопируйте ключ правильно</strong>: Весь вывод <code>cat ~/.ssh/*.pub</code> без лишнего.</li>
<li><strong>Проверьте email</strong>: В комментарии ключа должен быть ваш GitHub-email.</li>
<li><em>Нюанс для Windows</em>: В Git Bash пути ~/.ssh/, но проверьте C:\Users\username.ssh.</li>
</ul>
<h2>Настройка прав доступа и ssh-agent</h2>
<p dir="auto">Права на файлы — частая причина отказа. Приватный ключ должен иметь chmod 600 (только владелец читает/пишет), публичный — 644. Каталог ~/.ssh/ — 700. Неправильные разрешения SSH игнорирует ключ из безопасности.</p>
<p dir="auto">На клиенте: <code>chmod 700 ~/.ssh</code>, <code>chmod 600 ~/.ssh/id_*</code>, <code>chmod 644 ~/.ssh/id_*.pub</code>. Если серверный authorized_keys (для вашего Git-сервера), то тоже 600. ssh-agent должен видеть ключ: после <code>ssh-add -l</code> показывается отпечаток.</p>
<p dir="auto">Для Git Bash на Windows:</p>
<ol>
<li><code>eval "$(ssh-agent -s)"</code>.</li>
<li><code>ssh-add ~/.ssh/id_rsa</code>.</li>
<li><code>ssh -T git@github.com</code>.</li>
</ol>
<p dir="auto"><em>Если на сервере</em>: Проверьте /etc/ssh/sshd_config — PasswordAuthentication yes, если нужно fallback, и restart sshd.</p>
<p dir="auto">Список команд для прав:</p>
<ul>
<li><code>chmod 700 ~/.ssh</code> — каталог.</li>
<li><code>chmod 600 ~/.ssh/id_rsa</code> — приватный ключ.</li>
<li><code>chmod 644 ~/.ssh/id_rsa.pub</code> — публичный.</li>
<li><code>ssh-add -D</code> — очистить agent, если глючит.</li>
</ul>
<h2>Проверка репозитория и распространенные ошибки</h2>
<p dir="auto">Убедитесь, что remote-URL в SSH-формате: <code>git@github.com:username/repo.git</code>. HTTPS не подойдет для ключей — проверьте <code>git remote -v</code>. Если wrong URL, <code>git remote set-url origin git@github.com:username/repo.git</code>.</p>
<p dir="auto">Частые ошибки: ключ добавлен в wrong аккаунт GitHub, несколько ключей в agent (ssh-add -D и добавьте нужный), или known_hosts конфликтует (удалите строку с <a href="http://github.com" target="_blank" rel="noopener noreferrer">github.com</a>: <code>ssh-keygen -R github.com</code>). На Ubuntu после clone добавляется IP — это нормально, но ключ решает.</p>
<p dir="auto">Таблица ошибок и фиксов:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Ошибка</th>
<th>Фикс</th>
<th>Команда</th>
</tr>
</thead>
<tbody>
<tr>
<td>No identities</td>
<td>Добавить ключ</td>
<td><code>ssh-add</code></td>
</tr>
<tr>
<td>Wrong remote</td>
<td>Сменить URL</td>
<td><code>git remote set-url</code></td>
</tr>
<tr>
<td>Permissions</td>
<td>chmod</td>
<td><code>chmod 600 ~/.ssh/id_rsa</code></td>
</tr>
<tr>
<td>Agent not running</td>
<td>Start</td>
<td><code>eval $(ssh-agent -s)</code></td>
</tr>
</tbody>
</table>
<ul>
<li><strong>Очистите known_hosts при смене IP</strong>: <code>ssh-keygen -R "192.30.253.112"</code>.</li>
<li><strong>Для нескольких аккаунтов</strong>: ~/.ssh/config с Host gitub-work.</li>
<li><em>Нюанс</em>: В corporate firewall может блокироваться порт 22 — используйте 443 с ProxyCommand.</li>
</ul>
<h2>Когда проблема глубже: серверная сторона и альтернативы</h2>
<p dir="auto">Если клиент настроен, но ошибка на вашем Git-сервере — смотрите sshd_config. Убедитесь, PubkeyAuthentication yes, AuthorizedKeysFile .ssh/authorized_keys. Перезапустите <code>sudo systemctl restart sshd</code>.</p>
<p dir="auto">Права на серверном ~/.ssh/authorized_keys — 600, владелец root или user. Лог sshd (/var/log/auth.log) покажет детали: “invalid key” или “permission denied”. Для GitLab или Bitbucket шаги похожи, но добавляйте ключ в их UI.</p>
<p dir="auto">Это покрывает 95% случаев. Остальное — кастомные config или passphrase в ключе (ssh-agent поможет). Подумайте о deploy-keys для repo-specific доступа или passkey в новых версиях SSH.</p>
]]></description><link>https://forum.exlends.ru/topic/721/git-ssh-permission-denied-publickey-kak-nastroit-dostup-bez-oshibok</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:54:03 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/721.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Feb 2026 09:50:22 GMT</pubDate><ttl>60</ttl></channel></rss>