SSH без пароля с нестандартным расположением файла идентификации

16

Как часть сценария запуска, я должен автоматически открыть несколько окон gnome-терминала, один из этих терминалов автоматически отправляет:

ssh user@192.168.1.3

Ограничением является то, что мне все еще нужно ввести пароль для завершения соединения SSH.

Я хочу, чтобы мой скрипт инициировал команду и завершил соединение. В той мере, я пытался следовать инструкциям , как указано в общепринятом ответ здесь .

Из системы, к которой я хочу подключиться, я запустил:

ssh-keygen
Enter file in which to save the key: /home/user/ssh/keys/server1key

Затем мне предложили ввести фразу-пароль. Я оставил это поле пустым, так как не знал, для чего оно будет, поэтому я предполагал, что для его установки потребуется разблокировать его с помощью ключевой фразы каждый раз, когда я буду его использовать.

Продолжая с инструкциями, связанными выше, я тогда побежал и получил следующее:

ssh-copy-id user@IP
ERROR: No identities found

Быстрый поиск показал, что мне нужно было указать местоположение ключа, поскольку оно не было в месте сохранения по умолчанию, поэтому я исправил это:

ssh-copy-id -i /home/user/ssh/keys/server1key.pub user@192.168.1.3

После запроса пароля сервера он успешно добавил ключ. Тем не менее, при попытке войти в систему с помощью «ssh user @ IP», мне все равно было предложено ввести пароль.

Насколько я знаю, я правильно следовал связанным инструкциям, так что либо я что-то упустил, либо, возможно, существующая конфигурация мешает мне заставить это работать?

Обе системы используют 18.04 и openssh.

hiigaran
источник
Поэтому мне нужно указать расположение файла .pub при отправке команды SSH?
Хигаран
У меня есть немного другой способ организации моих файлов, отсюда и расположение не по умолчанию, но вы, ребята, очень помогли. Благодарю. Не стесняйтесь сделать ответ, который я могу принять.
Хигаран

Ответы:

35

Сбой происходит по той же причине, что и ssh-copy-idпри первом сбое, т. Е. Потому что вы выбрали нестандартное расположение для файла идентификации.

Вы можете разрешить это таким же образом, добавив -i /home/user/ssh/keys/server1keyк вашей sshкоманде - обратите внимание, что на стороне клиента требуется расположение файла закрытого ключа.

Из man ssh

 -i identity_file
         Selects a file from which the identity (private key) for public
         key authentication is read.  The default is ~/.ssh/identity for
         protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
         ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for protocol version 2.

В качестве альтернативы вы можете создать ~/.ssh/configзапись файла для хоста в соответствии с

Host            somename
Hostname        192.168.1.3
User            user
IdentityFile    /home/user/ssh/keys/server1key
steeldriver
источник
1
Я всегда предполагал, что конфигурационный файл требует отступов - я вижу, что это не так. Intruiging.
Борис Паук
Любой, кто использует OpenSSH должен иметь ~/.ssh/config, в противном случае OpenSSH использует общесистемное значение по умолчанию /etc/ssh/ssh_config. В случае, если кто-то найдет это полезным, я загрузил предварительно собранный ssh_config на свой GitHub некоторое время назад как отправную точку для пользователей, у которых может не быть времени, чтобы прочитать справочную страницу
ssh_config
@ JW0914, это только наполовину правда: отдельные значения в ~/.ssh/configпереопределяют глобальные ssh_config, но только наличие файла не отключит общесистемную конфигурацию.
Себастьян Старк
@SebastianStark Возможно, вы неправильно прочитали мой комментарий, поскольку я никогда не говорил, что это отключит общесистемную конфигурацию. То, что я сказал, было на 100% точным фактом.
JW0914
2

Другая причина, по которой происходит ssh-copy-idсбой, заключается в том, что ключ не был добавлен к агенту SSH.

Сначала проверьте и запустите, если ssh-agentзапущено:

eval "$(ssh-agent -s)"

Если вы получили идентификатор процесса, вы можете добавить свой ключ:

ssh-add -k /home/user/ssh/keys/server1key

С -kвами добавьте ключ в связку ключей.

Проверьте, добавлены ли ключи с помощью:

ssh-add -l

ssh-copy-id должен работать сейчас.

Мартейн
источник
-1

Надеюсь, что это сработает для вас. "Sshpass -p yourpassword" автоматически подключится к удаленному хосту.

[root @ localhost .ssh] # sshpass -p password123 ssh -l root localhost

JackyChan
источник
-1

Просто выполните 2 команды:

ssh-keygen
ssh-copy-id

Длинный ответ:

user@ip:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): temp_file
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in stemp.
Your public key has been saved in stemp.pub.
The key fingerprint is:
SHA256:5**M user@ip
The key's randomart image is:
+---[RSA 2048]----+
|  ...            |
| ...             |
| ..              |
| ..+.    o .     |
|                 |
|    B            |
|                 |
|=      *         |
|=+   o .         |
+----[SHA256]-----+

А потом:

user@ip:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ipDestination -p portDest
Мохсен Абаси
источник