У меня есть сервер под управлением Ubuntu 12.04 Server. Я хочу иметь возможность использовать SFTP в командной строке с ключом DSA, поэтому мне не нужно вводить пароль в терминал. Можно ли это сделать на тем же сервер ... т.е. я хочу SFTP на localhost (чтобы протестировать код PHP перед его запуском). Но я по-прежнему хочу разрешить ввод пароля другим клиентам, если они этого хотят. Я не хочу, чтобы сертификат был вынужденный, но я не хочу, чтобы он запрашивал пароль, если сертификат пройден или что-то еще.
У меня в ssh_config включены следующие параметры:
RSAAuthentication yes
PasswordAuthentication yes
PubkeyAuthentication yes
IdentityFile ~/.ssh/id_dsa
Следующие файлы с указанными разрешениями находятся в /root/.ssh/
-rw-r--r-- 1 root root 668 Apr 10 11:06 authorized_keys
-rw------- 1 root root 668 Apr 10 11:03 id_dsa
-rw-r--r-- 1 root root 608 Apr 10 11:03 id_dsa.pub
Я скопировал ключ в авторизованные ключи с помощью:
cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys
И когда я пропускаю авторизованные ключи, он добавляет ключ.
Итак, когда я пытаюсь подключиться к sftp с помощью sftp -v root@testserver
(только локально, опять же, для тестирования некоторого кода, но это не имеет значения), я все равно получаю запрос пароля. Вот часть подробного вывода:
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/id_rsa
debug1: Offering DSA public key: /root/.ssh/id_dsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /root/.ssh/id_ecdsa
debug1: Next authentication method: password
root@testserver's password:
Я пропустил что-то очевидное? Или не получится подключиться локально?
Спасибо
Разрешения в /root/.ssh
каталог неверен, если StrictModes yes
установлен в /etc/ssh/sshd_config
. Вы можете проверить, так ли это, включив LogLevel DEBUG
, перезагружая сервер и просматривая логи (/var/log/auth.log
для Ubuntu, если вы не меняли стандартную конфигурацию системного журнала)
Исправьте их, выдав:
chmod -R go= /root/.ssh
и попробуй еще раз.
Имея оба PubKeyAuthentication
и PasswordAuthentication
позволяет делать то, что вы хотите, то есть для тех пользователей, которые предоставят открытый ключ, их доступ будет без пароля (при условии, что их открытый ключ существует в authorized_keys
файл); а тем, кто этого не делает, будет предложено ввести пароль.
И RSAAuthentication
используется только с версией 1 протокола, которую, надеюсь, вы не используете, так как она небезопасна.
Не забудьте прочитать SSHD_CONFIG(5)
справочная страница.