Выполняет ли ssh-copy-id -i blah.pub user@host
вход в систему с использованием формы открытого ключа закрытого ключа, указанного параметром -i, или он выполняет вход с использованием ~/.ssh/id_rsa
?
Если ответ в том, что он входит в систему с ~/.ssh/id_rsa, / ключом, который SSH использует по умолчанию, а не с формой закрытого ключа открытого ключа, указанного с помощью -i, то почему он выдает здесь ошибку?
У меня есть пара закрытого и открытого ключей, rodney и rodney.pub. Если я переименую файл rodney в roddney, а затем выполню ssh-copy-id -i ./rodney.pub user@ip, я ожидаю, что он войдет в систему и выполнит добавление, хотя получаю ошибку "ERROR: failed to open ID file './rodney': No such file". Если я переименую roddney в rodney, то я не получу эту ошибку. Зачем ssh-copy-id нужен или важен закрытый ключ rodney, если все, что он делает, это ssh (который по умолчанию использует id_rsa для входа), а затем копирует rodney.pub?
решение1
Выполняет ли ssh-copy-id -i blah.pub user@host вход в систему с использованием закрытого ключа, указанного с помощью -i, или вход в систему выполняется с помощью ~/.ssh/id_rsa?"
Он не будет входить в систему с использованием закрытого ключа в форме открытого ключа, указанного с помощью -i.
Он входит в систему с ключом, который ssh использует по умолчанию. ~/.ssh/id_rsa, (хотя, возможно, если ssh-agent запущен, то ssh может попробовать другие ключи, но в любом случае... он не будет входить в систему с закрытым ключом, указанным с помощью -i.) Предположим, что у вас не запущен ssh-agent, что, я думаю, также является предположением в вопросе.
Если ответ в том, что он входит в систему с ~/.ssh/id_rsa, / ключом, который SSH использует по умолчанию, а не с формой закрытого ключа открытого ключа, указанного с помощью -i, то почему он выдает здесь ошибку?
У меня есть пара закрытого и открытого ключей, rodney и rodney.pub. Если я переименую файл rodney в roddney, а затем выполню ssh-copy-id -i ./rodney.pub user@ip, я ожидаю, что он войдет в систему и выполнит добавление, хотя получаю ошибку "ERROR: failed to open ID file './rodney': No such file". Если я переименую roddney в rodney, то я не получу эту ошибку. Зачем ssh-copy-id нужен или важен закрытый ключ rodney, если все, что он делает, это ssh (который по умолчанию использует id_rsa для входа), а затем копирует rodney.pub?
Некоторое время назад я говорил об этом с экспертом по SSH.
Мой вариант использования был таков: у меня был ноутбук и несколько VPS, я хотел, чтобы один VPS имел SSH/SFTP для всех остальных. У моего ноутбука уже был доступ SSH ко всем VPS.
Что я мог сделать, так это сгенерировать пару ключей на ноутбуке, затем ssh-copy-id открытого ключа на все VPS. Затем переместить или скопировать закрытый ключ, который я сгенерировал с ноутбука, на первый VPS.
Но что я сделал (что привело к ошибке, которая меня озадачила и заставила меня задаться вопросом), я сгенерировал пару ключей на своем ноутбуке, я скопировал сгенерированный мной закрытый ключ с ноутбука на первый VPS. Затем я удалил этот закрытый ключ со своего ноутбука, потому что я решил (ошибочно), что он мне больше не нужен на ноутбуке. Поскольку (на самом деле я правильно решил), ssh-copy-id не будет использовать его для входа ни в один из моих VPS. Так я и сделал, ssh-copy-id -i blah.pub user@IPofFirstVPS
и получил ошибку.
Для ssh-copy-id нужна пара ключей, то есть и закрытый, и открытый ключ.
Поэтому, если вы это сделаете ssh-copy-id -i blah.pub user@host
, то он ожидает форму закрытого ключа указанного файла открытого ключа.
Если бы вы это сделали, ssh-copy-id blah
то он записывает .pub в имя файла и делает ssh-copy-id blah.pub
. Так что вы можете также добавить .pub в конец, т.е. указать имя файла открытого ключа вместо имени файла закрытого ключа.
Но необходимость в закрытом ключе — это всего лишь «проверка безопасности». В том смысле, что это просто тест, который он делает перед тем, как что-то сделать, добавив открытый ключ в удаленный файл authorized_keys. Теоретически ему даже не нужно делать эту проверку, чтобы войти в систему и добавить.
Он предполагает/догадывается, и, возможно, ошибается, что в будущем вы можете подключаться по SSH с той машины, с которой вы выполнили ssh-copy-id, к удаленному хосту, используя форму закрытого ключа указанного вами открытого идентификатора, и что, следовательно, вам понадобится этот закрытый ключ на машине, с которой вы запускаете ssh-copy-id! (он не думает, что, возможно, вы сгенерировали пару ключей с намерением использовать этот закрытый ключ на других машинах, а просто используете ssh-copy-id с той машины, где вы находитесь, потому что у этой машины есть доступ по ssh ко многим другим вашим машинам).
ssh-copy-id не входит в систему с использованием закрытого ключа из пары открытых ключей.
У ssh-copy-id есть опция -o, с помощью которой можно указать закрытый ключ для входа в систему.
У меня не настроен ssh-agent, поэтому мой ssh подключается с закрытым ключом ~/.ssh/id_rsa, и это закрытый ключ, с которым ssh-copy-id будет входить в систему. Какой бы открытый ключ ни был указан в -i. Но он все равно проверит, существует ли имя файла закрытого ключа открытого ключа, указанного в -i!
ssh-copy-id — это скрипт, например, он даже начинается с этого #!/bin/sh
, так что кто-то, знакомый со скриптами, может даже запустить cat/vim и проверить его.