コマンドラインでSVNにSSHパスワードを提供するにはどうすればよいですか?


8

私の場合、SVNチェックアウトを行いたいです。

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

ただし、パスワードが1行に表示されるようにして、ポップアップしないようにします。


1
ちょっとした警告-あなたのユーザー名とパスワードはそのマシンにアクセスできる誰にでも公開されます。単純な "ps -elf"コマンドでコマンドライン全体が表示されます。一般に、これはセキュリティの点で良い考えではなく、なぜsvnやそのようなツールがパスワードを要求するのかはわかりません。システムへのアクセス権を持つユーザーを制御している場合は、それができないというわけではありません。一般的にそうすべきだと人々に思わせたくないだけです。
Jared

回答:


12

svn co svn + ssh:// username:password@10.106.191.164/home/svn/shproject


選択肢を提供するだけでなく、質問に答えるための+1(そうすることもできますが価値があります)。
briealeida 2009年

@briealeida-私はそれがうまくいくことを願っています:以下の私の投稿のテストによると、とにかくパスワードのプロンプトが表示されるため、うまくいかないようです。同じ投稿に解決策が含まれていますsshpass(これは私にとっては機能します)。
sdaau 2013

上記のように、これは実際には機能しません。
Jonny、2015年

拡張:sshがパスワードを要求しない限り機能する可能性が高く、ほとんどの場合そうです。
Jonny、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コマンドのセットごとに1 入力する必要があります。多くの場合、1つだけを実行したいのですが、svn checkoutとにかく大量のパスワードを入力する必要があります。このような場合、パスワードを1回だけ入力したいと思います。

したがって、@ Boinst@Mariusによる回答のみが私のユースケースに関連していました。残念ながら、私は彼らを働かせることができなかったので、彼らは助けにはなりませんでした。投稿者自身が投稿する前にコマンドを試してみたかどうか、私は今それらがどのように機能するか想像できません-これは私がUbuntu 10.04 PCでローカルに行ったテストです(そして私が見るたびに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-「--password」および「--username」オプションを無視するSubversion-スタックオーバーフロー

表示されるプロンプトは、Subversionがパスワードを要求するようではなく、sshがパスワードを要求するように見えます。

さらに、ログが示すように、sshそれ自体はusername:password@...URLの「」を受け入れないため、どちらも受け入れませんsvn。のURLでユーザ名だけを使用することが許容される理由svnは、おそらく次のように説明されてい~/.subversion/configます。

###(URLにユーザー名が含まれている場合、ホスト名は
###としてトンネルエージェントに渡されます。)

も言われていないことに注意してください<user>:<pass>@<hostname>

さて、DebianのSVN + SSHを介したSubversionページのおかげで、(たぶん)sshトンネルでSVN_SSH使用される環境変数があることにようやく気づきました~/.subversion/config。そして最後に、プログラム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

これを行うには、Linuxでsshpassを使用するのが最良の方法だと思います。

sshpassをインストールする

$ sudo apt-get install sshpass

一時的な環境変数を設定する

$ export SSHPASS=*yourpass*

SVN設定ファイルを編集する

$ nano ~/.subversion/config

最後sshpass -eに、sshコマンドの前に、ssh行に追加をコメント化します。

ssh = $SVN_SSH sshpass -e ssh -q -o ControlMaster=no
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.