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
 | ||
| ```
 | ||
| Удачной работы!
 | ||
| 
 |