Pertama sekali, saya perlu katakan bahawa semua mekanisme yang berkaitan dengan ssh memang agak rumit, dan mudah keliru Jika anda ingin menguasai sistem pengetahuan ini secara menyeluruh, anda mesti secara sistematik mempelajari ilmu yang berkaitan. Jadi perkara pertama dahulu, saya syorkan sebuah buku kepada anda, anda juga boleh meluangkan masa untuk membacanya sekali dan untuk semua:
SSH, The Secure Shell, edisi pertama buku ini adalah dalam bahasa Cina.
Mari bincangkan tentang soalan khusus anda.
Anda mesti memahami satu perkara dahulu: ssh-add Perintah ini tidak digunakan untuk mengingati kunci peribadi yang anda gunakan secara kekal. Malah, fungsinya hanyalah untuk menambah kunci peribadi yang anda tentukan pada sesi yang diuruskan oleh ssh-agent. Dan ssh-agent ialah perkhidmatan sesi sementara yang digunakan untuk menyimpan kunci peribadi, maksudnya, selepas anda memulakan semula, perkhidmatan ssh-agent akan ditetapkan semula. .
Jika kami ingin mengingati kunci peribadi yang sepadan secara kekal, kami tidak boleh bergantung pada perkhidmatan ssh-agent. Perkara yang boleh anda harapkan bergantung pada pilihan berikut yang mana sesuai untuk kes penggunaan anda.
Gunakan sejenis mekanisme pengurusan kunci selamat
Anda tidak menerangkan sistem pengendalian yang anda gunakan dalam soalan, jadi saya akan menggunakan Mac OS X yang saya gunakan setiap hari sebagai contoh. Sistem Mac mempunyai perkhidmatan Rantai Kunci terbina dalam dan program pengurusannya, yang boleh membantu anda menguruskan pelbagai kunci rahsia dengan mudah, termasuk kekunci ssh. ssh-add akan menambah kunci rahsia yang ditentukan pada perkhidmatan ssh-agent yang sedang dijalankan secara lalai, tetapi anda boleh menukar tingkah laku lalai ini untuk menambahkannya pada rantai kunci Dalam perkhidmatan, benarkan Mac anda membantu anda mengingati, mengurus dan memastikan kunci ini selamat.
Apa yang anda perlu lakukan ialah laksanakan arahan berikut:
$ ssh-add -K [path/to/your/ssh-key]
Selepas itu, apabila program lain meminta kunci ssh, mereka akan memintanya melalui perkhidmatan Keychain. Dalam tangkapan skrin di bawah, anda boleh melihat kekunci ssh yang diuruskan oleh Rantai Kunci pada mesin semasa saya, termasuk empat yang dihasilkan oleh saya sendiri dan satu digunakan oleh Apl Pelanggan Github - yang pertama adalah untuk digunakan oleh perintah berkaitan ssh, dan yang terakhir menentukan bahawa ia adalah hanya digunakan oleh aplikasi Github.app. Selain itu, kesemuanya adalah rantai kunci log masuk, yang bermaksud ia hanya akan berkuat kuasa selepas pengguna semasa log masuk. Ia tidak boleh digunakan jika pengguna ditukar atau pengguna tidak log masuk. Inilah yang Perkhidmatan rantai kunci sesuai untuk anda.
Bagaimana untuk menggunakan berbilang kunci ssh untuk aplikasi yang berbeza?
Isu ini adalah sesuatu yang saya belum faham sepenuhnya Menurut beberapa maklumat, selepas melakukan kerja di atas, aplikasi sepatutnya dapat memadankan kunci ssh yang berkenaan secara automatik. Walau bagaimanapun, dalam proses kajian saya, saya juga menghadapi situasi di mana saya perlu menentukannya secara manual (saya tidak memahami peranan Keychain pada masa itu, jadi saya sentiasa secara manual ssh-add), jadi mekanisme lain boleh membantu Anda menyelesaikan masalah ini, iaitu konfigurasi ssh.
Ringkasnya, konfigurasi ssh ialah fail konfigurasi yang menerangkan tetapan yang sepadan dengan kunci yang berbeza - termasuk nama hos, nama pengguna, dasar akses, dsb.
Di bawah saya telah menangkap dua coretan konfigurasi setempat:
Dua konfigurasi ini sepadan dengan kunci rahsia yang digunakan oleh perkhidmatan Github dan Pengekodan. Hos dalam baris pertama hanyalah nama, dan Nama Hos dalam baris ketiga ialah alamat sebenar yang sepadan, tetapi sebaiknya pastikan kedua-duanya konsisten supaya anda' t perlu menukar mereka dalam kepala anda.
Dengan konfigurasi ini, apabila saya git clone https://github.com/user/repo, kunci rahsia id_rsa akan digunakan, dan apabila saya git clone https://coding.net/user/repo, jelas nightire kunci rahsia akan digunakan.
Sudah tentu, konfigurasi ini tidak terhad kepada Git Semua aplikasi dan perintah asas yang menggunakan SSH akan mengikut arahan dalam fail konfigurasi untuk mencari kunci peribadi yang sepadan.
Berbalik kepada topik pada permulaan bahagian ini, saya percaya bahawa dengan Rantai Kunci untuk pengurusan, fail konfigurasi ini tidak sepatutnya diperlukan, tetapi saya belum mempunyai peluang untuk mengujinya lagi. Segala-galanya baik dalam persekitaran semasa saya akan mencubanya apabila saya menukar kepada mesin baharu dan mengkonfigurasi semula persekitaran.
Mengenai perhubungan yang sepadan antara Hos dan Nama Hos, jika Nama Hos ialah nama domain, sebaiknya pastikan ia konsisten. Tetapi berikut adalah dua petua:
1. Bagaimana jika terdapat dua konfigurasi berbeza di bawah nama domain yang sama?
Mengambil Github sebagai contoh, jika saya mempunyai dua akaun, satu peribadi dan satu organisasi, dan ingin menggunakan kunci yang berbeza, maka saya boleh menulis seperti ini:
Di sini, Hos sepadan dengan dua nama pengguna Github, iaitu github.com/nightire dan github.com/very-geek
2. Jika nama domain adalah IP digital, bolehkah ia dipermudahkan?
Hos boleh membantu anda menukar IP yang sepadan menjadi nama yang mudah diingati. Contohnya, jika saya mengkonfigurasi Pelayan Git (berdasarkan gitolite atau Gitlab atau mana-mana alat) dalam syarikat, alamat akses biasa ialah: git://xxx.xxx.xxx.xxx:repo.git Konfigurasi berikut boleh membantu anda memudahkannya untuk: git.visionet:repo.git
Sangat berguna.
Adakah cara yang lebih mudah?
Ya. Jika ssh-add sudah memenuhi keperluan anda (kecuali perlu melakukannya sekali lagi selepas permulaan), maka anda boleh mengautomasikannya sepenuhnya dengan skrip. Hanya tulis kandungan perintah ssh-add yang anda masukkan ke dalam .bashrc atau .bash_profile (atau mana-mana fail konfigurasi persekitaran shell lain yang anda gunakan), supaya selagi anda membuka terminal, ia akan menjadi Ini dilakukan secara automatik.
Tetapi seperti yang saya katakan sebelum ini, mekanisme ini bergantung pada perkhidmatan ssh-agent dan hanya sah di bawah terminal. Menggunakan mekanisme Keychain adalah sah di seluruh sistem (termasuk aplikasi yang tidak bergantung pada terminal) dan tidak perlu membuka perkhidmatan ssh-agent.
Akhir sekali, perkhidmatan Keychain bukan sahaja tersedia pada Mac Saya baru sahaja mencari dan mendapati bahawa Windows dan pelbagai Linux mempunyai mekanisme yang sepadan, tetapi saya tidak pernah menggunakannya, jadi saya hanya boleh menggunakan Mac sebagai contoh. Sebaik sahaja anda memahami konsep ini, saya percaya anda boleh mencari kaedah khusus itu sendiri.
ssh-add Perintah ini tidak digunakan untuk mengingati kunci peribadi yang anda gunakan secara kekal. Malah, fungsinya hanyalah untuk menambah kunci peribadi yang anda tentukan pada sesi yang diuruskan oleh ssh-agent. Dan ssh-agent ialah perkhidmatan sesi sementara yang digunakan untuk menyimpan kunci peribadi, yang bermaksud apabila anda memulakan semula, perkhidmatan ssh-agent akan ditetapkan semula.
Anda boleh belajar cara menambahkannya pada sesi semasa daripada artikel github: Menjana kunci SSH baharu dan menambahkannya pada ejen ssh
Anda boleh mengetahui cara ssh menggunakan kunci awam dan pasangan kunci peribadi melalui artikel berikut: Ralat: Kebenaran ditolak (kunci awam)
Selain itu, kandungan konfigurasi setempat diletakkan dalam fail:
Pertama sekali, saya perlu katakan bahawa semua mekanisme yang berkaitan dengan ssh memang agak rumit, dan mudah keliru Jika anda ingin menguasai sistem pengetahuan ini secara menyeluruh, anda mesti secara sistematik mempelajari ilmu yang berkaitan. Jadi perkara pertama dahulu, saya syorkan sebuah buku kepada anda, anda juga boleh meluangkan masa untuk membacanya sekali dan untuk semua:
SSH, The Secure Shell, edisi pertama buku ini adalah dalam bahasa Cina.
Mari bincangkan tentang soalan khusus anda.
Anda mesti memahami satu perkara dahulu: ssh-add Perintah ini tidak digunakan untuk mengingati kunci peribadi yang anda gunakan secara kekal. Malah, fungsinya hanyalah untuk menambah kunci peribadi yang anda tentukan pada sesi yang diuruskan oleh ssh-agent. Dan ssh-agent ialah perkhidmatan sesi sementara yang digunakan untuk menyimpan kunci peribadi, maksudnya, selepas anda memulakan semula, perkhidmatan ssh-agent akan ditetapkan semula. .
Jika kami ingin mengingati kunci peribadi yang sepadan secara kekal, kami tidak boleh bergantung pada perkhidmatan ssh-agent. Perkara yang boleh anda harapkan bergantung pada pilihan berikut yang mana sesuai untuk kes penggunaan anda.
Gunakan sejenis mekanisme pengurusan kunci selamat
Anda tidak menerangkan sistem pengendalian yang anda gunakan dalam soalan, jadi saya akan menggunakan Mac OS X yang saya gunakan setiap hari sebagai contoh. Sistem Mac mempunyai perkhidmatan Rantai Kunci terbina dalam dan program pengurusannya, yang boleh membantu anda menguruskan pelbagai kunci rahsia dengan mudah, termasuk kekunci ssh. ssh-add akan menambah kunci rahsia yang ditentukan pada perkhidmatan ssh-agent yang sedang dijalankan secara lalai, tetapi anda boleh menukar tingkah laku lalai ini untuk menambahkannya pada rantai kunci Dalam perkhidmatan, benarkan Mac anda membantu anda mengingati, mengurus dan memastikan kunci ini selamat.
Apa yang anda perlu lakukan ialah laksanakan arahan berikut:
Selepas itu, apabila program lain meminta kunci ssh, mereka akan memintanya melalui perkhidmatan Keychain. Dalam tangkapan skrin di bawah, anda boleh melihat kekunci ssh yang diuruskan oleh Rantai Kunci pada mesin semasa saya, termasuk empat yang dihasilkan oleh saya sendiri dan satu digunakan oleh Apl Pelanggan Github - yang pertama adalah untuk digunakan oleh perintah berkaitan ssh, dan yang terakhir menentukan bahawa ia adalah hanya digunakan oleh aplikasi Github.app. Selain itu, kesemuanya adalah rantai kunci log masuk, yang bermaksud ia hanya akan berkuat kuasa selepas pengguna semasa log masuk. Ia tidak boleh digunakan jika pengguna ditukar atau pengguna tidak log masuk. Inilah yang Perkhidmatan rantai kunci sesuai untuk anda.
Bagaimana untuk menggunakan berbilang kunci ssh untuk aplikasi yang berbeza?
Isu ini adalah sesuatu yang saya belum faham sepenuhnya Menurut beberapa maklumat, selepas melakukan kerja di atas, aplikasi sepatutnya dapat memadankan kunci ssh yang berkenaan secara automatik. Walau bagaimanapun, dalam proses kajian saya, saya juga menghadapi situasi di mana saya perlu menentukannya secara manual (saya tidak memahami peranan Keychain pada masa itu, jadi saya sentiasa secara manual ssh-add), jadi mekanisme lain boleh membantu Anda menyelesaikan masalah ini, iaitu konfigurasi ssh.
Ringkasnya, konfigurasi ssh ialah fail konfigurasi yang menerangkan tetapan yang sepadan dengan kunci yang berbeza - termasuk nama hos, nama pengguna, dasar akses, dsb.
Di bawah saya telah menangkap dua coretan konfigurasi setempat:
Dua konfigurasi ini sepadan dengan kunci rahsia yang digunakan oleh perkhidmatan Github dan Pengekodan. Hos dalam baris pertama hanyalah nama, dan Nama Hos dalam baris ketiga ialah alamat sebenar yang sepadan, tetapi sebaiknya pastikan kedua-duanya konsisten supaya anda' t perlu menukar mereka dalam kepala anda.
Dengan konfigurasi ini, apabila saya
git clone https://github.com/user/repo
, kunci rahsiaid_rsa
akan digunakan, dan apabila sayagit clone https://coding.net/user/repo
, jelasnightire
kunci rahsia akan digunakan.Sudah tentu, konfigurasi ini tidak terhad kepada Git Semua aplikasi dan perintah asas yang menggunakan SSH akan mengikut arahan dalam fail konfigurasi untuk mencari kunci peribadi yang sepadan.
Berbalik kepada topik pada permulaan bahagian ini, saya percaya bahawa dengan Rantai Kunci untuk pengurusan, fail konfigurasi ini tidak sepatutnya diperlukan, tetapi saya belum mempunyai peluang untuk mengujinya lagi. Segala-galanya baik dalam persekitaran semasa saya akan mencubanya apabila saya menukar kepada mesin baharu dan mengkonfigurasi semula persekitaran.
Adakah cara yang lebih mudah?
Ya. Jika ssh-add sudah memenuhi keperluan anda (kecuali perlu melakukannya sekali lagi selepas permulaan), maka anda boleh mengautomasikannya sepenuhnya dengan skrip. Hanya tulis kandungan perintah ssh-add yang anda masukkan ke dalam
.bashrc
atau.bash_profile
(atau mana-mana fail konfigurasi persekitaran shell lain yang anda gunakan), supaya selagi anda membuka terminal, ia akan menjadi Ini dilakukan secara automatik.Tetapi seperti yang saya katakan sebelum ini, mekanisme ini bergantung pada perkhidmatan ssh-agent dan hanya sah di bawah terminal. Menggunakan mekanisme Keychain adalah sah di seluruh sistem (termasuk aplikasi yang tidak bergantung pada terminal) dan tidak perlu membuka perkhidmatan ssh-agent.
Akhir sekali, perkhidmatan Keychain bukan sahaja tersedia pada Mac Saya baru sahaja mencari dan mendapati bahawa Windows dan pelbagai Linux mempunyai mekanisme yang sepadan, tetapi saya tidak pernah menggunakannya, jadi saya hanya boleh menggunakan Mac sebagai contoh. Sebaik sahaja anda memahami konsep ini, saya percaya anda boleh mencari kaedah khusus itu sendiri.
Tambahan kecil pada jawapan yang diterima
Anda boleh belajar cara menambahkannya pada sesi semasa daripada artikel github:
Menjana kunci SSH baharu dan menambahkannya pada ejen ssh
Anda boleh mengetahui cara ssh menggunakan kunci awam dan pasangan kunci peribadi melalui artikel berikut:
Ralat: Kebenaran ditolak (kunci awam)
Selain itu, kandungan konfigurasi setempat diletakkan dalam fail:
Saya hanya menggunakan akaun dan kata laluan yang sama github.com coding.net. Ini boleh digunakan.