Answers:
产生密钥对绝对是更好的选择。作为您的本地用户:
$ ssh-keygen -t rsa
(接受所有默认设置)
然后,获取.ssh / id_rsa.pub的内容,并将其添加到远程服务器上的.ssh / authorized_keys中。请确保将其全部粘贴到同一行中。另外,请务必确保.ssh目录的权限为600。
然后,您应该可以在不提示输入密码的情况下使用ssh。
好吧,我确实想输入密码-我不希望依靠自己的密码保存在某处;但是,我确实想每套svn + ssh命令输入一次;通常,您只想做一个svn checkout
-无论如何都必须输入大量的密码。在这种情况下,我只想输入一次密码。
因此,只有@Boinst和@Marius的答案与我的用例有关;不幸的是,他们没有帮助,因为我无法让他们工作。我想知道发布者自己在发布命令之前是否尝试过这些命令,因为现在我无法想象它们如何工作-这是我在Ubuntu 10.04 PC上本地进行的测试(每次我看到Ctrl-C时都会中断Ctrl-C)出现密码提示):
$ svn --version | head -1
svn, version 1.6.6 (r40053)
$ cd /tmp
$ svnadmin create myrepo
$ read -p 'ssh myself@127.0.0.1? ' PASS
ssh myself@127.0.0.1? [type _PASSWORD_, press ENTER]
## trying first with https://superuser.com/a/71479/39752
# (specify in URL user:pass separated by colon)
## plain ssh - asks for password anyway:
$ ssh myself:$PASS@127.0.0.1
myself:_PASSWORD_@127.0.0.1's password: ^C
# svn - with just username, as expected:
$ svn co svn+ssh://myself@127.0.0.1/tmp/myrepo myrepo-wc
myself@127.0.0.1's password: ^C
svn: Network connection closed unexpectedly
# svn - with password added to URL, asks for password anyway:
$ svn co svn+ssh://myself:$PASS@127.0.0.1/tmp/myrepo myrepo-wc
myself:_PASSWORD_@127.0.0.1's password: ^C
svn: Network connection closed unexpectedly
# trying then with https://superuser.com/a/380426/39752, https://superuser.com/a/327822/39752
# (--non-interactive and --username/--password on command line)
# svn - asks for password anyway:
$ svn co svn+ssh://myself@127.0.0.1/tmp/myrepo --non-interactive --trust-server-cert --username myself --password $PASS --no-auth-cache
myself@127.0.0.1's password: ^C
svn: Network connection closed unexpectedly
至于--username/--password
对svn
命令行而言-是无所谓有svn+ssh
,因为它的ssh
要求,而不是svn
:
svn-Subversion忽略“ --password”和“ --username”选项-代码日志
您得到的提示看起来并不像Subversion要求您输入密码,它看起来像ssh要求输入密码。
另外,如日志所示,ssh
它本身不接受username:password@...
URL中的“ ”- 也不接受svn
。为什么可以接受仅在URL中使用用户名svn
,原因可能在~/.subversion/config
以下方面进行了解释:
###(如果URL包含用户名,则主机名将以
###的形式作为@传递给隧道代理。)
公告没有说对<user>:<pass>@<hostname>
。
现在,由于在Debian上的Subversion over SVN + SSH上,我终于意识到有一个SVN_SSH
环境变量可用于~/.subversion/config
ssh隧道;最终打开了使用该程序sshpass
以单向方式处理密码的可能性:
$ SSHPASS=$PASS SVN_SSH="sshpass -e ssh" svn co svn+ssh://myself@127.0.0.1/tmp/myrepo myrepo-wc
Checked out revision 0.
好吧,至少我很高兴我终于找到了一个对我有用的解决方案-希望这也对其他人有帮助,
干杯!