Saya baru-baru ini diberikan akses nama pengguna / kata sandi ke daftar server dan ingin menyebarkan kunci publik SSH saya ke server ini, sehingga saya dapat masuk dengan lebih mudah.
Sehingga jelas:
- Tidak ada kunci publik yang sudah ada di server jauh yang dapat saya manfaatkan untuk mengotomatiskan ini
- Ini merupakan pertama kalinya saya masuk ke server ini, dan saya ingin tidak harus terus-menerus mengetikkan kredensial saya untuk mengaksesnya
- Saya juga tidak ingin mengetik kata sandi saya berulang kali menggunakan
ssh-copy-id
dalam for for loop.
ssh-copy-id
, memompa kata sandi saya berulang kali.Jawaban:
Daripada mengetikkan kata sandi Anda beberapa kali, Anda dapat menggunakan
pssh
dan-A
beralih untuk meminta kata sandi sekali, dan kemudian memasukkan kata sandi ke semua server dalam daftar.CATATAN: Menggunakan metode ini tidak memungkinkan Anda untuk menggunakan
ssh-copy-id
, jadi Anda harus menggulung metode Anda sendiri untuk menambahkan file kunci pub SSH Anda ke file akun jarak jauh Anda~/.ssh/authorized_keys
.Contoh
Berikut ini contoh yang berfungsi:
Skrip di atas umumnya terstruktur seperti:
pssh
Detail tingkat tinggicat <pubkey>
menghasilkan file kunci publikpssh
pssh
menggunakan-I
peralihan untuk menelan data melalui STDIN-l <remote user>
adalah akun server jarak jauh (kami mengasumsikan Anda memiliki nama pengguna yang sama di seluruh server dalam file IP)-A
memberitahupssh
untuk meminta kata sandi Anda dan kemudian menggunakannya kembali untuk semua server yang terhubung-i
memberitahupssh
untuk mengirim output ke STDOUT daripada menyimpannya dalam file (perilaku default-nya)'...cmds to add pubkey...'
- ini adalah bagian tersulit dari apa yang terjadi, jadi saya akan memecah ini dengan sendirinya (lihat di bawah)Perintah dijalankan di server jarak jauh
Ini adalah perintah yang
Dalam urutan:pssh
akan dijalankan di setiap server:atur umask pengguna jarak jauh ke 077, ini agar direktori atau file apa pun yang akan kita buat, akan memiliki izinnya diatur seperti:
buat direktori
~/.ssh
dan abaikan peringatan kami jika sudah ada di sana$afile
,, dengan path ke file Authorized_keyscat - >> $afile
- ambil input dari STDIN dan tambahkan ke file otor_keyssort -u $afile -o $afile
- secara unik mengurutkan file otor_keys dan menyimpannyaCATATAN: Bit terakhir itu adalah untuk menangani case di mana Anda menjalankan beberapa kali di atas terhadap server yang sama. Ini akan menghilangkan pubkey Anda dari ditambahkan beberapa kali.
Perhatikan kutu tunggal!
Juga berikan perhatian khusus pada fakta bahwa semua perintah ini bersarang di dalam tanda kutip tunggal. Itu penting, karena kami tidak ingin
$afile
dievaluasi sampai setelah dijalankan di server jauh.Saya telah memperluas di atas sehingga lebih mudah untuk membaca di sini, tetapi saya biasanya menjalankan semuanya pada satu baris seperti ini:
Materi bonus
Dengan menggunakan
pssh
Anda dapat melupakan harus membuat file dan menyediakan konten dinamis menggunakan-h <(...some command...)
atau Anda dapat membuat daftar IP menggunakanpssh
switch lain-H "ip1 ip2 ip3"
,.Sebagai contoh:
Di atas dapat digunakan untuk mengekstrak daftar IP dari
~/.ssh/config
file saya . Tentu saja Anda juga dapat menggunakanprintf
untuk menghasilkan konten dinamis:Sebagai contoh:
Anda juga dapat menggunakan
seq
untuk menghasilkan urutan angka yang diformat juga!Referensi & alat serupa untuk
pssh
Jika Anda tidak ingin menggunakan
pssh
seperti yang saya lakukan di atas, ada beberapa opsi lain yang tersedia.sumber
pssh
adalah skrip Python, dan dapat diinstal denganpip install pssh
. (2) Anda juga dapat menghasilkanssh
kunci pada semua server secara bersamaan dengan menjalankanssh-keygen
melaluipssh
. (3) Setelah membuat kunci, Anda dapat mendistribusikan kunci "all-to-all" dengan menyalin semua kunci publik dalam satu loop ke mesin lokal, merakitnya secara bersamaauthorized_keys
, dan menyalinnya ke setiap mesin.ssh_agent
Sayassh_add
dapat membantu dengan kata sandi.cat
penghargaan (lama): untuk memulai saluran pipa dengan isi file, Anda bisa mengarahkan ulang input dari file itu.pssh
.cat ~/.ssh/*.pub | ...
. Mungkin atau tidak mungkin apa yang Anda inginkan dalam situasi ini.Alternatif menggunakan
xargs
,sshpass
danssh-copy-id
:Dengan asumsi kredensial Anda tinggal di credentials.txt dalam format
user:password@server
:Anda bisa melakukannya:
Catatan: Ingatlah untuk menghapus credentials.txt setelah penggunaan!
sumber
ClusterSSH memberi Anda jendela di setiap mesin dan dengan jendela umum untuk mengontrol semua jendela.
Jika kita berbicara 10 mesin, ini akan berhasil. Jika kita berbicara 100 mesin, akan ada banyak jendela.
Keindahan ClusterSSH adalah bahwa jika satu mesin tidak 100% seperti yang lain, Anda cukup mengklik jendela, dan mengirim penekanan tombol hanya ke mesin itu sebelum Anda kembali mengirim penekanan tombol ke semua mesin.
sumber
Menggunakan Ansible cukup sederhana. Cukup ganti
<USER>
dengan nama login aslisumber
Beberapa hal yang mungkin cocok dengan tagihan:
Seperti disebutkan dalam jawaban lain,
sshpass
kemungkinan solusi termudah.sumber
Anda memiliki dua opsi di sini:
Anda dapat membuat file dengan semua alamat IP server, lalu lakukan hal berikut
Dengan asumsi
servers.txt
adalah file dengan IP / nama host.Anda dapat meletakkan semua IP / nama host dalam satu lingkaran, dan jalankan
ssh-copy-id
seperti di bawah ini:sumber
ssh-copy-id
dalam for for."