如何通过命令行向SVN提供SSH密码?


8

就我而言,我想进行SVN结帐:

svn co svn+ssh://10.106.191.164/home/svn/shproject

但是,我想在那一行输入密码,这样它就不会弹出。


1
只是一个快速警告-您的用户名和密码将向有权访问该计算机的任何人公开。只需一个简单的“ ps -elf”命令即可显示完整的命令行。通常,从安全角度考虑,这不是一个好主意,以及为什么svn和类似的工具提示输入密码。并不是说,如果您控制谁可以访问系统,就不会做,只是不想让人们认为他们通常应该这样做。
Jared

Answers:


12

svn co svn + ssh://用户名:密码@ 10.106.191.164 / home / svn / shproject


+1是为了回答问题,而不仅仅是提供其他选择(尽管可能是值得的)。
briealeida

@briealeida-我只是希望它能工作:根据下面我的帖子中的测试,它似乎不起作用,因为仍然会出现密码提示;同一篇文章包含一个解决方案sshpass(对我有用)。
sdaau

如上所述,这实际上不起作用。
强尼

扩展:只要ssh不要求输入密码,它在大多数情况下都可能会起作用。
强尼2015年

16

假设您使用的是SSH,则首选方法是使用公钥进行授权,从而完全节省了密码需求。

可在此处找到有关创建和安装密钥的指南。


当然,如果您希望自己的钥匙真正安全,则应给它输入密码。:/
Rob

7

产生密钥对绝对是更好的选择。作为您的本地用户:

$ ssh-keygen -t rsa

(接受所有默认设置)

然后,获取.ssh / id_rsa.pub的内容,并将其添加到远程服务器上的.ssh / authorized_keys中。请确保将其全部粘贴到同一行中。另外,请务必确保.ssh目录的权限为600。

然后,您应该可以在不提示输入密码的情况下使用ssh。


“服务器上〜/ .ssh的权限应为700。服务器上的〜/ .ssh / authorized_keys文件应具有600的模式。客户端上(私用)密钥的权限应该是600。” askubuntu.com/a/46425
Jonny

6

您可能不希望使用密码,而是希望查看私钥/公钥对并使用ssh来使用。大多数Linux发行版都带有易于使用的命令来创建这样的对。但是,这将需要访问服务器端(一次)以将公钥文件存储在用户的〜/ .ssh / authorized_keys文件中。


3

好吧,我确实想输入密码-我不希望依靠自己的密码保存在某处;但是,我确实想每套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/--passwordsvn命令行而言-是无所谓有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/configssh隧道;最终打开了使用该程序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.

好吧,至少我很高兴我终于找到了一个对我有用的解决方案-希望这也对其他人有帮助,
干杯!


2
svn co svn+ssh://10.106.191.164/home/svn/shproject --non-interactive --trust-server-cert --username <username> --password <password> --no-auth-cache


1

我认为使用sshpass(在Linux中)是最好的方法。

安装sshpass

$ sudo apt-get install sshpass

设置临时环境变量

$ export SSHPASS=*yourpass*

编辑svn配置文件

$ nano ~/.subversion/config

最后sshpass -essh命令之前注释掉添加到ssh行

ssh = $SVN_SSH sshpass -e ssh -q -o ControlMaster=no
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.