Укажите секретный ключ в SSH как строку
Я могу подключиться к серверу через SSH с помощью опции -i, чтобы указать закрытый ключ:
ssh -i ~/.ssh/id_dsa [email protected]
Я создаю script, который берет текст id_dsa
из базы данных, но я не уверен, как я могу передать эту строку в SSH. Мне нужно что-то вроде:
ssh --option $STRING [email protected]
Где $STRING
содержит значение id_dsa
. Мне нужно знать --option
, если он есть.
Ответы
Ответ 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
Это сработало для меня.