Как я могу добавить идентификатор для SSH?


37

Мне нужно запускать ssh-add <key>каждый раз, когда мне нужно ssh в веб-сервер. Есть ли способ добавить идентификатор навсегда, поэтому мне не нужно постоянно добавлять идентификаторы при каждом входе в систему?

РЕДАКТИРОВАТЬ: ключ представляет собой файл pem, который я скачал из облачного сервиса.

Ответы:


40

Сгенерируйте ваш ключ как обычно:, ssh-keygenзатем поместите этот ключ на удаленный сервер ssh-copy-id, чтобы синхронизировать его с принятыми ключами удаленного сервера.

ssh-keygen
ssh-copy-id user@host

Он запросит ваш пароль, а затем выполнит все шаги, необходимые для связи вашего .pubключа с удаленным SSH-сервером.

По умолчанию он скопирует все ваши ключи .pub на удаленный сервер. Если вы только что создали свой ключ, ssh-keygenто это не проблема (потому что у вас есть только один!). Однако, если у вас есть несколько ключей, вы можете скопировать только определенный ключ с -iфлагом.

ssh-copy-id -i ~.ssh/key_name.pub user@host

Замена key_name.pubна имя ключа.


4
Для кого-то вроде меня (или задающего вопрос), чье единственное знакомство с ssh использует его для доступа к облачным серверам, где веб-служба создает ключ и дает его мне (в моем случае, серверам AWS), этот ответ трудно найти. понять, не делая каких-либо значительных предварительных исследований. Я никогда не использовал ssh-keygenили ssh-copy-id, например. С другой стороны, ответы, подобные этому , совершенно ясны и полезны для меня, учитывая мой уровень знаний. От вас зависит, хотите ли вы каким-либо образом подправить свой ответ, чтобы помочь таким невежественным людям, как я. :)
Марк Амери

Ответ предполагает, что я хочу создать новый ключ. Что если я хочу просто зарегистрировать существующий ключ в связке ключей?
Донкиксот

@donquixote: см. ответ пользователя user626052 ниже .
naught101

7

Вы можете создать ключ ssh с помощью команды:

ssh-keygen

Затем вы можете скопировать свой ключ на сервер с помощью:

ssh serveruser@servername "echo `cat ~/.ssh/id_dsa.pub` >> ~/.ssh/authorized_keys" 

Теперь вы можете автоматически войти в свой веб-сервер


1
Для копирования ключа на сервер вы можете просто использовать ssh-copy-id -i ~/.ssh/id_dsa.pub serveruser@servernameили ~/.ssh/id_rsa.pubсоответственно. На самом деле, если вы используете имя по умолчанию для файла ключей, вам даже не нужно его указывать.
Карстен Тиль

5

положить это в свой ~/.bashrc

eval $(ssh-agent)
ssh-add ~/.ssh/where_ever_privake_key_is 

3
Это единственный ответ, который действительно отвечает на вопрос. Другие просто добавляют открытый ключ по умолчанию на один целевой сервер, что раздражает, если у вас есть два + отдельные для разных наборов серверов.
naught101

3

Если ваш ключ не содержит пароля и назван в качестве одного из файлов, которые ssh будет пытаться найти при идентификации ( ~/.ssh/id_dsaили ~/.ssh/id_rsa), вам не нужно добавлять его в ваш агент.

НО. Если есть малейшая возможность кражи этих файлов, вы бы просто позволили кому-либо получить доступ к серверам, на которых вы используете эту идентификационную информацию. Короче, забил.

ИМХО, закрытые ключи без пароля - плохая практика, и их следует использовать только в тех средах, где ~/.ssh/authorized_keysэто очень ограничивает.


1
ssh-agent может хранить ваш расшифрованный закрытый ключ, пока вы вошли в систему. Если включено, gnome-keyring может даже использовать ваш пароль для входа. Да, и ssh-copy-id тоже может копировать ваш открытый ключ на серверы.
Фрэнк

2

Напишите короткий скрипт оболочки, который запустит ssh-add и затем подключится, например:

ssh-add ~/.ssh/your-key
ssh user@remotehost

Затем вы можете войти в ваш хост с помощью одной команды.


1

Для AWS загрузите ключ pem и выполните:

ssh-add /path/to/pemfile.pem

Это сработало для меня, Ubuntu 18.04. Источник , больше ничего не нужно было.

NB . Тем не менее, важно установить разрешения на 400, прежде чем делать это.

chmod 400 /path/to/pemfile.pem

Если нет, вы получите ошибку:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @
ВНИМАНИЕ: Незащищенный частный ключевой файл! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ Разрешения 0664 для '/home/toing_toing/blablabla.pem' слишком открыты. Требуется, чтобы ваши файлы закрытого ключа НЕ были доступны другим. Этот закрытый ключ будет игнорироваться.



-2

Вы говорите об Amazon Cloud? В вашем ~ / .bashrc создайте переменные окружения:

# Amazon
export EC2_PRIVATE_KEY=$HOME/Keys/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=$HOME/Keys/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/

да, я говорю об облаке, но это пара ключей, которую ssh должен включить в экземпляр, и для использования api-tools необходимы указанные выше переменные окружения :)
theTuxRacer

Хорошо. Поэтому сгенерируйте ключ RSA без пароля: 'ssh-keygen -t rsa', а затем соедините сгенерированный открытый ключ (~ / .ssh / id_dsa.pub) с файлом ~ / .ssh / authorized_keys удаленного сервера. Один вкладыш, чтобы достигнуть этого, был дан многими.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.