У меня есть SSH-доступ к машине FreeBSD, на которой svnadmin
(и остальные необходимые утилиты) установлены. svn - это версия 1.7.9 (r1462340). Я нахожусь в Windows 7 x64, использую Tortoise SVN 1.7.7.
Я следил это официальное руководство чтобы помочь мне настроить мой сервер и Tortoise SVN, но у меня проблемы с его настройкой.
Я создал пару закрытых / открытых ключей и добавил их на свой сервер. ~/.ssh/authorized_keys
файла и моей конфигурации Putty соответственно. Я могу подключиться к удаленной машине, используя замазку и свой закрытый ключ.
Я также попытался настроить Tortoise SVN на то же самое, и я подключаюсь к:
svn+ssh://myBSDusername@it2svn/somerepo
куда it2svn
это имя работает Соединительный профиль шпатлевки, и somerepo
это репозиторий в корне моего репозитория (~/svnroot/somerepo
).
Возникающая проблема заключается в том, что Tortoise SVN запрашивает парольную фразу моего ключа, и независимо от того, сколько раз я ввожу ее правильно, диалог ввода пароля закрывается на 1-2 секунды, после чего он снова запрашивает у меня парольную фразу. Это даже не говорит, что это неправильно, он просто постоянно спрашивает у меня кодовую фразу.
Если я намеренно введу неправильную кодовую фразу, мне снова будет предложено ввести ее мгновенно, без задержки в 1-2 секунды, возникающей при входе в правую. В диалоговом окне все еще не говорится, что это неправильно, хотя я ввожу тарабарщину. Возможно, это ошибка с их стороны, но это все еще не объясняет, почему моя правильная кодовая фраза не принимается.
Вот содержание authorized_keys
файл (с удаленным фактическим содержимым ключей):
ssh-dss AAA....FuA== myBSDusername@ems
command="svnserve -t -r ~/svnroot --tunnel-user=svnAuthorDude",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-dss AAAA....IFuA== myBSDusername@ems
Важная заметка: в руководстве сказано, что моя "командная" строка должна выглядеть так:
command="svnserve -t -r <ReposRootPath> --tunnel-user=<author>",
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,
no-pty ssh-rsa <PublicKey> <Comment>
Но ключ, который я создал с помощью ssh-keygen
используя те же параметры, что и в руководстве, начинается с ssh-dss
вместо того ssh-rsa
, вот почему ssh-rsa
заменяется в моем собственном файле на dss
(видимо, потому что ключ - это DSA, а не ключ RSA).
Проблема заключалась в том, что вы использовали парольную фразу в вашей паре ключей, а не использовали pageant.
Когда TortoiseSVn соединяется с туннелем SSH, кажется, что он делает несколько отдельных запросов, используя plink (или TortoisePLink). Каждый раз, когда это происходит, нужен ключ SSH, поэтому его нужно разблокировать, поэтому возникает запрос пароля.
Если вы не защищаете паролем пару ключей, спрашивать пароль не нужно.
Если вы сконфигурируете pageant для загрузки ключа до использования TortoiseSVN, то вместо этого plink получит ключ, уже разблокированный и кэшированный, из pageant. Таким образом, вы можете использовать ключ, защищенный паролем, и вам не придется вводить пароль повторно. Тем не менее, вам все равно нужно ввести его один раз при добавлении ключа к конкурсу.
Я регенерировал пару ключей с помощью PuttyGen и сделал ее парой ключей RSA2 (по сравнению со старыми ключами DSA). Я также пропустил защиту моего закрытого ключа парольной фразой, и теперь все (волшебным образом) работает. Я не знаю точно, какое изменение на самом деле устранило проблему, но я надеюсь, что это поможет будущему разработчику решить аналогичную проблему.
Вот (соответствующее) содержимое моего пользовательского ~/.ssh/authorized_keys
:
ssh-rsa AAAA...Wc= rsa-key-20130529
command="svnserve -t -r /user/rest/of/path/svnroot --tunnel-user=someuser",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAA...Wc= andrei