Я работаю с группой серверов в VPN с Ubuntu 18.04, и для каждого сервера у меня есть свой файл ключа. Однако, когда я пытаюсь безопасно скопировать файлы (например, безопасно распространить ключ munge между серверами), мне отказывают, поскольку у меня нет соответствующего ключа (по крайней мере, я думаю, что это причина, он возвращает "Отказано в доступе (открытый ключ)").
Хранить свои личные ключи на каждом сервере, вероятно, плохая практика? Копировать файлы на локальную машину, а затем копировать их на другой сервер — это больно, и я не уверен, что это безопасно.
Как это правильно обрабатывается? Могу ли я использовать пользователя на каждом сервере (например, munge) для копирования между ними, если не в любое место, то в некоторые назначенные папки, которые я позже смогу sudo cp? Есть ли вариант, который не является уязвимостью?
решение1
Аутентификация на основе ключей с ssh (scp — ответвление ssh) — это вопрос криптографии с открытым ключом. У вас лично есть закрытый ключ, который вы держите в секрете и распространяете свой открытый ключ среди всех.
Итак, отвечая на ваш вопрос, вам НЕ нужно и не нужно иметь несколько закрытых ключей, одного будет достаточно. Затем вы загружаете свои открытые ключи на ВСЕ серверы. Вы должны хранить резервную копию вашего закрытого ключа в каком-то безопасном месте, зашифрованную с помощью парольной фразы.
Во-вторых, хранить ваши личные ключи на серверах, к которым вы обращаетесь, противоречит философии криптографии с открытым ключом; вы не сохраняете личный ключ в секрете. Ваш личный ключ должен быть в безопасности и сохранности у вас и храниться в тайне от всех; только вы должны иметь личный ключ и никто другой.
Также хорошей практикой является использование одного и того же имени пользователя и открытого ключа на всех серверах.
Так что держите свой единственный закрытый ключ в безопасности и распространяйте открытый ключ на всех серверах, к которым вы хотите получить доступ. Теперь вы можете использовать тот же самый закрытый ключ для входа на все ваши серверы!
решение2
Если вам нужно обмениваться данными между серверами, вы можете взглянуть на scp -3 server1:path1 server2:path2
. Он передаст данные, используя ваш хост в качестве посредника (без прямого соединения между серверами).
Вы также можете настроить свой .ssh/config
файл с IdentityFile
набором параметров для каждого блока сервера:
Host server1
IdentityFile ~/.ssh/file1
Host server2
IdentityFile ~/.ssh/file2