PUBKEY=$(cat ~/.ssh/id_rsa.pub); grep -q "$PUBKEY" ~/.ssh/authorized_keys || echo "$PUBKEY" >> ~/.ssh/authorized_keys
Этот один лайнер проверяет, присутствует ли уже пабки в файле authorized_keys
, и добавляет его в конец файла, если его нет.
~/.ssh/id_rsa.pub
вот путь к добавляемому пабки
~/. ssh/authorized_keys
здесь путь к целевому файлу authorized_keys
(~
символ обозначает ``
Для удалённого хоста можно использовать ssh-copy-id
Возможно, вы захотите пропустить идею возиться с ~/.ssh/authorized_keys и просто использовать функцию SSH CA, как описано, например, здесь: https://www.digitalocean.com/community/tutorials/how-to-create-an-ssh-ca-to-validate-hosts-and-clients-with-ubuntu (прокрутите вниз до "How To Configure User Keys").
Прелесть этого в том, что вы настраиваете свой контейнер один раз (добавляя TrustedUserCAKeys /etc/ssh/users_ca.pub
, где users_ca.pub
содержит открытую часть ключа CA, сгенерированного на вашей локальной машине) и с этого момента, если вы хотите предоставить доступ к контейнеру любому ключу, вы просто подписываете открытую часть этого ключа своим закрытым ключом CA и указываете, какие учетные записи разрешены для ключа, который вы подписываете. Работает как по волшебству :)
Предполагая, что открытый ключ находится в ~/.ssh/id_rsa.pub
, вы можете безоговорочно добавить его в файл ~/.ssh/authorized_keys
и использовать sort -u
в этом файле для удаления дубликатов:
# Make sure that the file exists and has the correct permissions
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# Add new key, removing duplicates.
sort -u -o ~/.ssh/authorized_keys ~/.ssh/authorized_keys ~/.ssh/id_rsa.pub