Penerusan Agen SSH menggunakan nama pengguna dan kunci yang berbeda


18

Ada pertanyaan yang sangat mirip bahwa jika dijawab mungkin adalah jawaban untuk pertanyaan ini. Sayangnya itu adalah kasus "tidak perlu menjawab pertanyaan yang saya tanyakan karena masalahnya bukan seperti yang saya pikirkan."

Pengaturan

  1. Server bastion.ec2 menerima koneksi ssh dari workstation saya viassh -i mykey.pem myname@bastion.ec2
  2. Server service1.ec2 menerima koneksi ssh hanya dari bastion.ec2 viassh -i sharedkey.pem shareduser@service1.ec2

Persyaratan

  1. Kedua tombol hanya ada di workstation saya, jadi saya tidak bisa melakukan perintah ke-2 tanpa menyalin kunci
  2. Untuk alasan keamanan saya ingin menggunakan penerusan ssh-agent daripada menyalin kunci ssh ke bastion.ec2

Solusinya

Di sinilah Anda masuk. Bagaimana saya bisa meneruskan kunci yang berbeda untuk koneksi ke-2?

Jika pengguna bersama memiliki mykey.pub di dalamnya ~/.ssh/authorized_keysini akan bekerja:

ssh -i mykey.pem myname@bastion.ec2 ssh shareduser@service1.ec2

Namun, saya tidak ingin setiap pengguna harus meletakkan kunci publik mereka di setiap server.

Jawaban:


21

Langkah 1

Pastikan agen lokal Anda siap

Hanya karena Anda dapat ssh ke server benteng Anda tanpa menentukan jalur kunci Anda atau diminta kata sandi, tidak berarti bahwa agen ssh Anda menjalankan dan menahan kunci Anda. Beberapa OS modern (mis: OSX) menangani ini untuk Anda.

Di mesin lokal Anda

$ ssh-add -L
ssh-rsa ObahfCbvagGbLbhSbeHfvatEBG13== ~/.ssh/mykey.pem
ssh-rsa LbhNerWhfgJnnlGbbPyrireEBG13== ~/.ssh/sharedkey.pem

gbr.1

Itu berarti agen Anda sedang berjalan dan memiliki kunci Anda.

$ ssh-add -L
The agent has no identities.

gbr.2

Itu berarti Anda belum menambahkan kunci apa pun ke agen Anda. Perbaiki dengan:

ssh-add ~/.ssh/mykey.pem ~/.ssh/sharedkey.pem

gbr.3

Langkah 2

Pastikan agen jarak jauh Anda siap

SSH ke server yang benteng Anda dan ulangi cek dari gambar 1 & Gbr.2 . Namun, kesalahan yang lebih mungkin Anda dapatkan adalah ini:

$ ssh-add -L
Could not open a connection to your authentication agent.

gbr.4

Itu kemungkinan besar berarti bahwa klien SSH Anda tidak meneruskan koneksi agen otentikasi Anda.

Anda dapat memaksakan ini dengan -Aflag (selama sshd config di server mengizinkannya, yang merupakan default ).

$ ssh -A bastion.ec2

gbr.5

Langkah 3

Pastikan Anda menggunakan tombol yang tepat

Jika Anda telah menambahkan kunci ke agen Anda, agen Anda meneruskan, dan agen jarak jauh Anda mencantumkan kunci lokal Anda. Hanya ada dua kemungkinan alasan Anda tidak mendapatkan koneksi. Entah Anda tidak menggunakan kunci kanan atau Anda tidak menggunakan nama pengguna yang tepat.

Keluarkan mitra publik ke kunci pribadi Anda:

$ cd
$ cd .ssh
$ ssh-keygen -y -f mykey.pem
ssh-rsa ObahfCbvagGbLbhSbeHfvatEBG13
$ ssh-keygen -y -f sharedkey.pem
ssh-rsa LbhNerWhfgJnnlGbbPyrireEBG13

gbr.6

Ini harus sama dengan apa yang Anda lihat dari ssh-add -Lhingga ==akhir.

Sekarang dengan satu atau lain cara Anda harus masuk ke kotak Anda gagal terhubung dan melihat isi $HOME/.ssh/authorized_keysfile untuk pengguna yang Anda coba sambungkan. Anda perlu memastikan kunci publik yang Anda hasilkan dengan perintah di atas ada di file itu pada sebuah baris dengan sendirinya. Anda tidak dapat mempercayai bahwa sharedkey.pubBro 2 kubus mengirimi Anda email benar. Memeriksa! Ini mungkin memerlukan orang lain yang bisa masuk SSH sebagai pengguna itu untuk mendapatkan Anda file otor_keys atau mendapatkan akses root. Jika Anda sudah sejauh ini dan masih tidak berhasil, Anda tidak perlu mengambil jalan pintas.

Langkah 4

Buat itu mudah

Semoga langkah-langkah di atas telah membuat Anda masuk. Sekarang mari kita buat sakit kepala ini pergi selama Anda menggunakan workstation ini.

Konfigurasikan ssh-client lokal Anda

Host *
    # A lot of people put an IdentityFile line in this Host * section.
    # Don't do that unless you will use only 1 key everywhere forever.
    #IdentityFile id_rsa

Host bastion.ec2
    # You want to make sure you always forward your agent to this host.
    # But don't forward to untrusted hosts. So don't put it in Host *
    ForwardAgent yes
    # Go a head and put the IP here in case DNS ever fails you.
    # Comment it out if you want. Having it recorded is a good backup.
    HostName 172.31.0.1
    # You don't want to create a proxy loop later, so be explicit here.
    ProxyCommand none
    # SSH should try using all keys in your .ssh folder, but if you
    # know you want this key, being explicit speeds authentication.
    IdentityFile ~/.ssh/mykey.pem

# Connect effortlessly by hostname or IP address
# This assumes that your internal DNS uses the fake TLD ec2
# This assumes that 172.31.0.0 is your C-Class subnet
Host *.ec2 172.31.*
    # This command says proxy all ssh connections through bastion as if
    # you had done an ssh -A
    ProxyCommand ssh -W %h:%p bastion.ec2
    ForwardAgent yes
    # These next lines are documentation you leave as a love letter to
    # your future self when all else fails or you have to help a
    # coworker and decide to look at your own config.
    # ssh-add ~/.ssh/*.pem
    # ssh -At bastion.ecs ssh admin@172.31.18.19

gbr.7

Jika Anda tidak mengambil hal lain dari gambar.7 itu harus menggunakan ProxyCommand& ForwardAgent.

Secara otomatis mengisi .bash_profile Anda

Anda tidak ingin harus melakukannya ssh-addsecara manual setiap kali Anda masuk ke mesin Anda. ~/.bash_profileadalah skrip yang berjalan setiap kali Anda masuk **. Letakkan garis dari ara. 3 di sana dan Anda harus selalu menyiapkan agen Anda.

** Jangan bingung dengan ini .bashrcyang berjalan untuk setiap terminal [interaktif] baru. Agen Anda terus berjalan bahkan jika Anda menutup semua sesi terminal Anda. Tidak Perlu memuat ulang kunci Anda

Alternatif menggunakan .bash_profile

Saya juga telah membuat intisari yang menambahkan Agen Peluncuran OSX / macOS . Anda dapat menggunakan metode itu untuk memulai ssh-agentboot Anda. Sangat mudah untuk menginstal:

curl -sSL https://gist.github.com/RichardBronosky/429a8fff2687a16959294bcee336dd2a/raw/install.sh | bash

Langkah 2: Anda tidak bisa memaksa ForwardAgent yesdengan -Ajika tuan rumah tidak mengizinkan itu.
dlamblin

Terima kasih @dlamblin, saya menambahkan info yang relevan dan tautan ke dokumentasi sshd.
Bruno Bronosky

1

Di sinilah Anda masuk. Bagaimana saya bisa meneruskan kunci yang berbeda untuk koneksi ke-2?

Anda tidak meneruskan kunci. Anda meneruskan agen dan dapat memiliki kunci yang sepenuhnya independen daripada yang Anda gunakan untuk otentikasi di lompatan pertama. Periksa kunci di agen Anda menggunakan ssh-add -L.

Tetapi yang lebih baik lagi, jalankan koneksi ProxyCommand ssh -W %h:%p myname@bastion.ec2, yang akan menghindari kebutuhan untuk meneruskan agen, opsi heap atau baris perintah dan kebutuhan untuk mengotentikasi dari host langsung.

Anda bisa memasukkannya ke dalam konfigurasi Anda (lihat man ssh_config).


1
Untungnya saya benar-benar tahu apa yang Anda bicarakan di sini, tetapi rata-rata pengguna tidak. Anda berdebat semantik dengan "Anda meneruskan agen, bukan kunci". Anda memberi saya cukup untuk melanjutkan bahwa saya bisa menyelesaikan ini sehingga saya ingin memberi Anda kesempatan untuk memperbaiki jawaban Anda sebelum saya menambahkan jawaban saya. Petunjuk: ssh-add mykey.pem sharedkey.pemlalu konfirmasikan dengan ssh-add -Litussh -At myname@bastion.ec2 ssh shareduser@service1.ec2
Bruno Bronosky
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.