Bagaimana saya bisa memberikan kata sandi SSH ke SVN di baris perintah?

8

Dalam kasus saya, saya ingin melakukan checkout SVN:

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

Namun, saya ingin memiliki kata sandi di satu baris itu, sehingga tidak muncul.

Alex
sumber
1
Hanya peringatan cepat - nama pengguna dan kata sandi Anda akan diekspos ke SIAPAPUN dengan akses ke mesin itu. Hanya perintah "ps -elf" sederhana yang akan menampilkan baris perintah penuh. Secara umum ini bukan ide yang baik untuk keamanan, dan mengapa svn dan alat seperti itu meminta kata sandi. Bukan berarti Anda tidak dapat melakukannya jika Anda mengontrol siapa yang memiliki akses ke sistem, hanya saja tidak ingin orang berpikir mereka harus melakukan ini secara umum.
Jared

Jawaban:

12

svn co svn + ssh: // username: [email protected]/home/svn/shproject

Marius
sumber
+1 untuk menjawab pertanyaan dan tidak hanya memberikan alternatif (layak meskipun mungkin).
briealeida
@ Briealeida - Saya hanya berharap itu berhasil: sesuai dengan tes di posting saya di bawah ini , tampaknya tidak berfungsi, karena prompt kata sandi muncul; posting yang sama berisi solusi dengan sshpass(yang berfungsi untuk saya).
sdaau
Seperti dikatakan di atas, ini tidak benar-benar berfungsi.
Jonny
Diperluas: itu kemungkinan akan berfungsi selama ssh tidak meminta kata sandi, yang dalam banyak kasus hal itu akan terjadi.
Jonny
16

Karena Anda menggunakan SSH, cara yang disukai adalah menggunakan kunci publik untuk otorisasi, yang menghemat kebutuhan kata sandi sepenuhnya.

Panduan untuk membuat dan memasang kunci dapat ditemukan di sini .

abyx
sumber
Tentu saja, jika Anda ingin kunci Anda benar-benar aman, Anda harus memberikannya frase sandi. : /
Rob
7

Jauh lebih baik adalah menghasilkan keypair. Sebagai pengguna lokal Anda:

$ ssh-keygen -t rsa

(terima semua default)

Kemudian ambil konten .ssh / id_rsa.pub dan tambahkan di server jarak jauh ke .ssh / official_keys. Pastikan semuanya disisipkan ke baris yang sama. Juga pastikan izin direktori .ssh adalah 600.

Maka Anda harus dapat ssh tanpa diminta kata sandi.


sumber
"Izin ~ / .ssh di server harus 700. File ~ / .ssh / official_keys (di server) seharusnya memiliki mode 600. Izin dari kunci (pribadi) di sisi klien seharusnya 600. " askubuntu.com/a/46425
Jonny
6

Alih-alih menggunakan kata sandi, Anda mungkin ingin melihat pada pasangan kunci publik / publik dan ssh menggunakannya. kebanyakan distribusi linux datang dengan perintah yang mudah digunakan untuk membuat pasangan semacam itu. namun ini membutuhkan akses ke sisi server (sekali) untuk menyetor file kunci publik di file ~ / .ssh / otor_keys pengguna Anda.

Daniel Schneller
sumber
3

Yah, aku tidak ingin memasukkan password - saya tidak suka bergantung pada kata sandi yang disimpan di suatu tempat; namun, saya ingin memasukkannya sekali per set perintah svn + ssh; dan seringkali, Anda hanya ingin melakukannya svn checkout- dan harus memasukkan banyak kata sandi. Dalam hal ini saya hanya ingin mengetikkan kata sandi.

Jadi, hanya jawaban oleh @Boinst dan @Marius yang relevan untuk kasus penggunaan saya; Sayangnya, mereka tidak membantu, karena saya tidak bisa membuat mereka bekerja. Saya bertanya-tanya apakah penulis posting sendiri mencoba perintah sebelum mempostingnya, karena sekarang saya tidak bisa membayangkan bagaimana mereka bisa bekerja - inilah tes yang saya lakukan secara lokal pada Ubuntu 10,04 PC saya (dan saya putus dengan Ctrl-C, setiap kali saya melihat kata sandi muncul):

$ svn --version | head -1
svn, version 1.6.6 (r40053)

$ cd /tmp
$ svnadmin create myrepo
$ read -p 'ssh [email protected]? ' PASS
ssh [email protected]? [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:[email protected]
myself:[email protected]'s password: ^C

# svn - with just username, as expected:

$ svn co svn+ssh://[email protected]/tmp/myrepo myrepo-wc
[email protected]'s password: ^C
svn: Network connection closed unexpectedly

# svn - with password added to URL, asks for password anyway:

$ svn co svn+ssh://myself:[email protected]/tmp/myrepo myrepo-wc
myself:[email protected]'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://[email protected]/tmp/myrepo --non-interactive --trust-server-cert --username myself --password $PASS --no-auth-cache
[email protected]'s password: ^C
svn: Network connection closed unexpectedly

Sejauh --username/--passwordpada svnbaris perintah yang bersangkutan - yang tidak peduli dengan svn+ssh, karena itu sshmeminta, tidak svn:

svn - Subversion mengabaikan opsi "--password" dan "--username" - Stack Overflow

Prompt yang Anda peroleh sepertinya Subversion tidak meminta kata sandi, sepertinya ssh meminta kata sandi.

Selain itu, seperti yang ditunjukkan oleh log, sshitu sendiri tidak menerima " username:password@..." di URL - dan begitu juga tidak svn. Mengapa hanya dapat menggunakan nama pengguna di URL svn, mungkin dijelaskan dalam ~/.subversion/config:

### (Jika URL menyertakan nama pengguna, maka nama host akan
### diteruskan ke agen terowongan sebagai @.)

Perhatikan tidak ada yang dikatakan tentang <user>:<pass>@<hostname>.

Sekarang, berkat halaman Subversi lebih dari SVN + SSH di Debian , saya akhirnya menyadari ada SVN_SSHvariabel lingkungan yang digunakan ~/.subversion/configuntuk terowongan (saya kira) ssh; dan yang akhirnya membuka kemungkinan untuk menggunakan program sshpassuntuk menangani kata sandi sedemikian rupa satu arah:

$ SSHPASS=$PASS SVN_SSH="sshpass -e ssh" svn co svn+ssh://[email protected]/tmp/myrepo myrepo-wc
Checked out revision 0.

Ya, setidaknya saya senang akhirnya menemukan solusi yang berfungsi untuk saya - semoga ini membantu orang lain juga,
Ceria!

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

Saya pikir menggunakan sshpass (di Linux) adalah cara terbaik untuk mendapatkan ini.

Instal sshpass

$ sudo apt-get install sshpass

Setel variabel lingkungan sementara

$ export SSHPASS=*yourpass*

Edit file konfigurasi svn

$ nano ~/.subversion/config

Akhirnya komentar tambahkan sshpass -eke ssh line, sebelum sshperintah

ssh = $SVN_SSH sshpass -e ssh -q -o ControlMaster=no
Francesco
sumber