«Достаточно хорошая» проверка - проверить, начинается ли ключ с правильного заголовка.
Часть данных ключевого файла должна декодироваться из base64, иначе произойдет сбой с base64.binascii.Error
Распакуйте первые 4 байта (целое число), которое должно быть 7. Это
длина следующей строки (я думаю, это может быть по-другому, но вас интересует только ssh-rsa).
openssh_pubkey = open('keyfile').read()
type, key_string, comment = openssh_pubkey.split()
data = base64.decodestring(key_string)
int_len = 4
str_len = struct.unpack('>I', data[:int_len])[0] # this should return 7
data[int_len:int_len+str_len] == type
В качестве альтернативы, вы можете отказаться от бинарных проверок и искать AAAAB3NzaC1yc2EA
в начале ключа ssh-rsa, бит, который я все равно проверил бы, что он действительный base64.
[редактировать] Разъяснение:
Посредством спецификации, первая часть, если ключ представляет собой строку с префиксом длины. Длина упаковывается как беззнаковое целое с прямым порядком байтов ('> I' для структуры python). Здесь 7, потому что следующая строка ssh-rsa имеет длину 7 байт. data[4:11]
- это следующие 7 байтов (для префикса длины), но я отредактировал приведенный выше код, чтобы использовать некоторые описательные переменные, чтобы сделать это более понятным. Если вы хотите быть внимательным, вам также следует проверить ssh-dss и, возможно, pgp-sign-rsa и pgp-sign-dss, но они встречаются гораздо реже.