Subversion忽略" --password"和" --username"选项

时间:2020-03-05 18:45:03  来源:igfitidea点击:

当我尝试执行任何svn命令并提供--username和/或者--password选项时,无论如何都会提示我输入密码,并且始终会尝试使用当前用户,而不是--username。 " --no-auth-cache"和" --non-interactive"都不会对此产生任何影响。这是一个问题,因为我正试图从脚本中调用svn命令,而我无法让它显示提示。

例如,以user1身份登录:

# $ svn update --username 'user2' --password 'password'
# [email protected]'s password:

其他选项可以正常工作:

# $ svn --version --quiet
# 1.3.2

为什么提示我?
为何要求用户1的密码而不是用户2的密码?
我99%确信我的所有权限都设置正确。 svn是否有一些配置选项可以关闭命令行密码?
还是完全其他?

我在Fedora Core 5(Bordeaux)上运行svn 1.3.2(r19776)。

这是我的环境变量的列表(已将敏感信息X删除)。它们似乎都不适用于SVN:

# HOSTNAME=XXXXXX
# TERM=xterm
# SHELL=/bin/sh
# HISTSIZE=1000
# KDE_NO_IPV6=1
# SSH_CLIENT=XXX.XXX.XXX.XXX XXXXX XX
# QTDIR=/usr/lib/qt-3.3
# QTINC=/usr/lib/qt-3.3/include
# SSH_TTY=/dev/pts/2
# USER=XXXXXX
# LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:
# KDEDIR=/usr
# MAIL=/var/spool/mail/XXXXXX
# PATH=/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin
# INPUTRC=/etc/inputrc
# PWD=/home/users/XXXXXX/my_repository
# KDE_IS_PRELINKED=1
# LANG=en_US.UTF-8
# SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
# SHLVL=1
# HOME=/home/users/XXXXXX
# LOGNAME=XXXXXX
# QTLIB=/usr/lib/qt-3.3/lib
# CVS_RSH=ssh
# SSH_CONNECTION=69.202.73.122 60998 216.7.19.47 22
# LESSOPEN=|/usr/bin/lesspipe.sh %s
# G_BROKEN_FILENAMES=1
# _=/bin/env
# OLDPWD=/home/users/XXXXXX

解决方案

回答

我能给最好的是SVN 1.5上的"为我工作"。我们可以尝试在" svn更新"中添加" --no-auth-cache",以查看是否可以更轻松地覆盖。

如果要永久从user2切换到user1,请转至* nix上的〜/ .subversion / auth /并删除domain.com的auth缓存文件(最有可能在〜/ .subversion / auth / svn.simple / -just中仔细阅读它们,我们会找到想要删除的内容)。虽然可以更新当前的身份验证缓存,但我们必须确保也更新长度令牌。下次我们更新时再次得到提示更为简单。

回答

命令中实际上是否有单引号?我认为它们不是必需的。另外,我认为我们还需要--no-auth-cache--non-interactive

这是我用的(没有单引号)

--non-interactive --no-auth-cache --username XXXX --password YYYY

有关更多信息,请参见svnbook中的"客户端凭据缓存"文档。

回答

我们收到的提示看起来并不像Subversion要求我们输入密码,而是看起来像ssh要求输入密码。所以我的猜测是我们已经签出了svn + ssh://签出,而不是svn://或者http://或者https://签出。

IIRC我们尝试的所有选项仅适用于svn / http / https结帐。我们可以运行svn info来确认我们使用的是哪种存储库吗?

如果使用的是ssh,则应设置基于密钥的身份验证,以便脚本可以在不提示输入密码的情况下运行。

回答

问题在于工作副本是通过svn + ssh(感谢Thomas)签出的。我没有按照建议设置ssh密钥,而是使用svn://domain.com/path/to/repo而不是svn + ssh://domain.com/path/to/repo签出了新的工作副本。因为此工作副本与存储库本身位于同一台机器上,所以我并没有真正错过任何东西,现在我可以免费使用--password和--username选项。现在看来,我想起来很明显。

回答

我遇到了同样的问题,并通过设置〜/ .ssh / config文件以显式使用正确的用户名(即用于登录服务器而不是本地计算机的用户名)解决了该问题。因此,例如:

Host server.hostname
  User username

我发现此博客文章很有帮助:http://www.highlevelbits.com/2007/04/svn-over-ssh-prompts-for-wrong-username.html