154 lines
7.0 KiB
Markdown
154 lines
7.0 KiB
Markdown
---
|
||
title: Авторизация по ключу rsa по ssh
|
||
description:
|
||
published: true
|
||
date: 2024-07-09T09:51:04.649Z
|
||
tags: ssh, rsa
|
||
editor: markdown
|
||
dateCreated: 2023-11-03T12:36:39.209Z
|
||
---
|
||
|
||
## SSH авторизация по ключам
|
||
|
||
В интернете можно найти множество иснтрукций о том как настроить *ssh авторизацию по ключам* для использования с репозиториями, удаленным администрированием, различными программами контроля версий и т.д.
|
||
Встречаются даже такие извращения как использование Putty агента в связке с Tortoise Git на основе Putty сессий. Варианты с генерацией ключа с помощью Putty, конвертирование из одного формата в другой и подсовывание в Tortoise Git я, изрядно измучившись, тоже выкинул. Даже на самом GitHub лежит мануал с использованием агента ключей.
|
||
|
||
Перелопатив кучу мануалов я решил что мне нужен универсальный способ. И похоже мне удалось такой найти.
|
||
|
||
Итак, мне нужно чтобы работало:
|
||
* из любых терминалов (cmd, PowerShell, Git-bash, Git-cmd)
|
||
* с любыми shell (cmd, sh, bash, zsh т.д.)
|
||
* c любыми встроенными в терминалы или shell утилитами (ssh, scp, sftp и т.д.)
|
||
* со всеми репозиториями (GitHub, GitLab, Gitea)
|
||
* с различными GUI (TortoiseGit, VSCode, Altium Designer и пр.)
|
||
* без использования агентов ключей (ssh-agent или Putty)
|
||
* одинаково настраивалось как в Windows, так и в Linux.
|
||
* на одну машину должен приходиться один ключ, чтобы не настраивать отдельно для каждой утилиты/приложения/IDE
|
||
* один ключ для работы с репозиториями и доступом к удаленным серверам
|
||
|
||
Как оказалось чтобы все это реализовать нужно было не гуглить мануалы, а читать **man ssh**.
|
||
|
||
---
|
||
|
||
Для работы с SSH в windows будем использовать OpenSSH. Ставить отдельно его не надо т.к. OpenSSH идет в комплекте с Git. Ставим его в первую очередь.
|
||
|
||
Если же Git уже установлен, то идем дальше...
|
||
|
||
---
|
||
|
||
### 1. Открываем терминал и создаем ключ нашей локальной системы.
|
||
|
||
```
|
||
$ ssh-keygen -t rsa
|
||
```
|
||
На все вопросы нажимаем "Enter", отказываясь от ключевой фразы.
|
||
|
||
Как результат в домашней папке пользователя будет создана ключевая пара:
|
||
- .ssh/id_rsa (закрытый ключ)
|
||
- .ssh/id_rsa.pub (открытый ключ)
|
||
|
||
Закрытый ключ мы не трогаем. Он секретный и остается только на этой машние.
|
||
Открытый ключ мы используем для помещения в репозитории и удаленные сервера.
|
||
|
||
---
|
||
|
||
### 2. Добавляем ключ в ~/.ssh/config
|
||
|
||
Поскольку мы не будем пользоваться никакими агентами ключей, то для пользования репозиториями, нужно прописать данный ключ в ~/.ssh/config в качестве ипользуемого по умолчанию глобально.
|
||
|
||
Если этого файла нет, то создаем его и добавляем в него строчку:
|
||
```
|
||
IdentityFile ~/.ssh/id_rsa
|
||
```
|
||
~/.ssh/config вообще очень полезный файл. Рекомендую почитать что он еще умеет. Например туда можно прописать хосты типа:
|
||
```
|
||
Host site
|
||
HostName www.my-site.dyndns.org
|
||
Port 2222
|
||
User user
|
||
```
|
||
Тогда вместо такого:
|
||
```
|
||
$ ssh user@www.my-site.dyndns.org -p 2222
|
||
```
|
||
Можно писать так:
|
||
```
|
||
$ ssh site
|
||
```
|
||
|
||
---
|
||
### 3. Добавляем ключ на удаленные сервера Linux
|
||
|
||
Если ключ нужен только для работы с репозиториями, то переходим к следующему пункту.
|
||
|
||
Если есть программа ssh-copy-id (в Linux и Git-bash она есть), прописываем публичный ключ на удаленный сервер.
|
||
```
|
||
$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip
|
||
```
|
||
Eсли ssh-copy-id нет, то можно сделать это вручную.
|
||
|
||
Вот последовательность действий:
|
||
- логинимся на удаленной машине
|
||
- добавляем свой ключ в файл authorized_keys
|
||
```
|
||
remote$ echo "содержимое файла открытого ключа" >> ~/.ssh/authorized_keys
|
||
```
|
||
- делаем правильные права (если файл только что был создан)
|
||
```
|
||
remote$ chmod 600 ~/.ssh/authorized_keys
|
||
```
|
||
- проверяем, что все работает, запускаем на локальном компьютере.
|
||
```
|
||
$ ssh user@server_ip
|
||
```
|
||
|
||
---
|
||
### 4. Добавляем ключ в репозитории
|
||
|
||
Для работы с репозиториями необходимо прописать туда публичный ключ.
|
||
Для этого копируем содержимое файла ~/.ssh/id_rsa.pub во все необходимые репозитории.
|
||
|
||
- GitHub: Settings -> SSH and GPG keys -> Nes SSH key
|
||
- GitLab: Preferences -> SSH Keys -> Add key
|
||
- Gitea: Settings -> SSH / GPG keys -> Add Key
|
||
|
||
В качестве имени ключа удобно указывать пользователя и имя машины.
|
||
|
||
**user@host**
|
||
|
||
Для тестирования авторизации можно запустить:
|
||
```
|
||
$ ssh -T git@github.com
|
||
```
|
||
Аналогично и для других репозиториев:
|
||
```
|
||
$ ssh -T git@repo_url
|
||
```
|
||
Что проверяю я:
|
||
```
|
||
$ ssh -T git@github.com
|
||
$ ssh -T git@git.fwdrd.ru
|
||
$ ssh -T git@gitlab.srv.mf-t.ru -p 2222
|
||
```
|
||
---
|
||
### 4. Настройка TortoiseGit
|
||
Чтобы TortiseGit переключился на использование OpenSSH надо в настройках
|
||
```
|
||
Settings -> Network -> SSH client
|
||
```
|
||
поменять клиент на
|
||
```
|
||
C:\Program Files\Git\usr\bin\ssh.exe
|
||
```
|
||
---
|
||
### PS (Linux)
|
||
|
||
Если все настроено но все равно спрашивает пароль, то надо проверить права:
|
||
```
|
||
~ 755
|
||
~/.ssh 700
|
||
~/.ssh/* 600
|
||
```
|
||
Удачной работы!
|
||
|