Проблема: у меня есть 20-30 ssh-agent
личностей. Большинство серверов отказывают в аутентификации Too many failed authentications
, поскольку SSH обычно не позволяет мне попробовать 20 различных ключей для входа в систему.
В данный момент я указываю файл идентификации для каждого хоста вручную, используя директиву IdentityFile
and IdentitiesOnly
, чтобы SSH попробовал только один файл ключа, который работает.
К сожалению, это перестает работать, как только оригинальные ключи больше не доступны. ssh-add -l
показывает мне правильные пути для каждого ключевого файла, и они совпадают с путями .ssh/config
, но это не работает. Очевидно, SSH выбирает идентификационные данные по подписи открытого ключа, а не по имени файла, что означает, что исходные файлы должны быть доступны, чтобы SSH мог извлечь открытый ключ.
Есть две проблемы с этим:
- он перестает работать, как только я отключаю флешку с ключами
- это делает пересылку агента бесполезной, поскольку файлы ключей недоступны на удаленном хосте
Конечно, я мог бы извлечь открытые ключи из моих файлов идентификации и сохранить их на своем компьютере и на каждом удаленном компьютере, на котором я обычно захожу. Это не похоже на желаемое решение, хотя.
Что мне нужно, так это возможность выбрать идентификатор из ssh-agent по имени файла, чтобы я мог легко выбрать правильный ключ, используя .ssh/config
или передавая -i /path/to/original/key
, даже на удаленном хосте, в который я входил по SSH. Было бы еще лучше, если бы я мог «прозвать» ключи, чтобы мне даже не пришлось указывать полный путь.
authorized_keys
файл, который, в зависимости от используемого ключа, выполняет различные команды, даже не разрешая прямой доступ к оболочке.Ответы:
Думаю, мне придется ответить на мой собственный вопрос, поскольку, похоже, нет способа запросить личность по имени файла.
Я написал быстрые скрипты Python, которые создают файл открытого ключа
.ssh/fingerprints
для каждого ключа, который хранит агент. Затем я могу указать этот файл, который не содержит секретного ключа, используяIdentityFile
команду , и SSH выберет правильную идентификационную информацию у агента SSH. Прекрасно работает, и позволяет мне использовать агент для столько секретных ключей, сколько я хочу.источник
Запустить
на удаленной машине, чтобы автоматически сгенерировать все файлы открытых ключей (при условии, что открытые ключи в вашем
.ssh/config
названы,privateKeyFileName.pub
и пути к ним отсутствуют). Позвонитеchown $USER .ssh/*
по вашемуsudo
делу.источник
Выбирая из принятого решения и предполагая, что вы просто хотите повторно использовать идентификатор, используемый для получения доступа к исходному серверу, тогда что-то вроде:
достаточно.
источник