Подтвердить что ты не робот

Укажите секретный ключ в SSH как строку

Я могу подключиться к серверу через SSH с помощью опции -i, чтобы указать закрытый ключ:

ssh -i ~/.ssh/id_dsa [email protected]

Я создаю script, который берет текст id_dsa из базы данных, но я не уверен, как я могу передать эту строку в SSH. Мне нужно что-то вроде:

ssh --option $STRING [email protected]

Где $STRING содержит значение id_dsa. Мне нужно знать --option, если он есть.

4b9b3361

Ответ 1

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

РЕДАКТИРОВАТЬ: (из-за добавления дополнительных комментариев в g)

Вы действительно должны хранить ключ во временном файле. Убедитесь, что вы правильно установили права перед записью в файл, если вы не используете команду типа mktemp для создания временного файла.

Убедитесь, что вы запустили процесс брокера (или агента в случае OpenSSH) и загрузите ключ, используя <whatever command you use to fetch it form the database> | ssh-add - Забастовкa >

Ответ 2

Попробуйте следующее:

echo $KEY | ssh -i /dev/stdin [email protected] command

Ключ не появляется из инструкции PS, но поскольку stdin перенаправлен, он полезен только для одиночных команд или туннелей.

Ответ 3

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

#!/bin/bash
KEY="${ YOUR SSH KEY HERE INSIDE }"
echo "${KEY}" | ssh -q -i /dev/stdin [email protected] 'hostnamectl'
exit 0

Примечания: -q подавляет все предупреждения

Кстати, подвох в этом скрипте выше, так как мы используем echo, он напечатает ключ ssh, что опять-таки не рекомендуется, чтобы скрыть, что вы можете использовать grep для grep чего-то, что не будет напечатано наверняка, но все равно stdin будет иметь значение от эха. Таким образом, последний cmd может быть изменен следующим образом:

#!/bin/bash
KEY="${ YOUR SSH KEY HERE INSIDE }"
echo "${KEY}" | grep -qw "less" | ssh -q -i /dev/stdin [email protected] 'hostnamectl'
exit 0

Это сработало для меня.