GNU/Linux >> Belajar Linux >  >> Linux

SSH dari A sampai B ke C, menggunakan kunci privat di B

Solusi 1:

Skema:

    ssh       ssh
A ------> B ------> C
    ^          ^
 using A's   using B's
 ssh key     ssh key

Prasyarat:

  • A sedang menjalankan ssh-agent;
  • A dapat mengakses B;
  • B dapat mengakses C;
  • A kunci publik ssh ada di B:~/.ssh/authorized_keys
  • B kunci publik ssh ada di C:~/.ssh/authorized_keys

Di ~/.ssh/config pada A , tambahkan

Host C
    ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add && nc %h %p'

Jika kunci pribadi ssh Anda di B berada di lokasi yang tidak standar, tambahkan jalurnya setelah ssh-add .

Anda seharusnya sekarang dapat mengakses C dari A :

A$ ssh C
C$

Solusi 2:

Periksa apakah mengikuti berfungsi.

ssh -t B ssh C

Gunakan perintah berikut jika Anda ingin menggunakan kunci yang disimpan di B.

ssh -t B ssh -i /path/to/identity_on_B C

Di sini kita menentukan perintah yaitu ssh -i /path/to/identity_on_B C untuk dieksekusi di B alih-alih shell login.

Solusi 3:

Saya sudah menyelesaikan ini sekarang. Inilah solusinya, yang agak mudah. Saya seharusnya melihatnya lebih awal:

~/.ssh/config:

Host B
  HostName 1.2.3.4
  User myuser
  IdentityFile ~/.ssh/rsa_key
  ControlMaster auto
  ControlPath ~/.ssh/socket/master-%l-%[email protected]%h:%p

Host C.*
  User customer_username
  Port customer_port
  IdentityFile remote/path/to/ssh/key
  ForwardAgent yes
  ProxyCommand ssh accessable.server nc %h %p

Host C.server-1
  HostName 2.3.4.5

'B' adalah server Proksi yang Anda lewati. Itu harus dikonfigurasi seperti biasanya Anda mengonfigurasi akses ke server.

'C' adalah host tujuan. Perlu dikonfigurasi untuk menggunakan 'B' dalam proses koneksi. File identitas di 'C' adalah jalur ke kunci ssh di 'B'. ProxyCommand menggunakan Netcat untuk membuka koneksi ke 'C' dari 'B'. Netcat, atau nc, perlu dipasang di 'B'.

NOTE1:Agar ini berfungsi, Anda perlu menyalin file identitas B (biasanya ~/.ssh/rd_isa) ke A. Saya biasanya mengubah namanya menjadi rd_isa_B.

NOTE2:Solusi ini juga berfungsi untuk scp.

Semoga ini bisa membantu orang lain.

Solusi 4:

Saya menulis skrip sederhana untuk mencantumkan kunci ssh saya pada contoh jarak jauh, dan kemudian menambahkan yang saya pilih ke agen ssh lokal saya. Ini tidak terlalu bersih, tetapi memungkinkan saya untuk menyimpan semua kunci di lokasi yang jauh daripada secara lokal.

Berikut skripnya jika ada yang tertarik:

#!/usr/bin/ruby

require "rubygems"
require "fileutils"

# Get key list
key_list = (`ssh jumpbox "cd ~/.ssh/ ; ls id_rsa*" | sed 's/id_rsa_/  /g' | sed     's/id_rsa//g'`)
puts ' '
puts 'Available customer keys:'
puts key_list

# Get customer name input
puts ' '
puts 'Enter customer name: '
customer_name = gets.chomp

# Add key to ssh-agent
key_name = "~/.ssh/id_rsa_#{customer_name}"
puts ' '
puts "Adding #{key_name} to local ssh-agent"
`ssh jumpbox "ssh-add ~/.ssh/id_rsa_#{customer_name}"`
exit 0

Solusi 5:

Jawaban Snowball sangat membantu. Namun, saya membuat beberapa modifikasi pada perintah tersebut dan ingin menjelaskan cara kerjanya. Mengingat situasi ini:

    ssh        ssh
A -------> B -------> C
     ^          ^
  using A's  using B's
  ssh key    ssh key

Ubah ~/.ssh/config Anda file dan tambahkan host B yang ingin Anda lompati, seperti biasanya Anda mengonfigurasi host:

Host B
 User myusername
 HostName b.mycompany.com

Kemudian Anda menambahkan host C yang ingin Anda tuju:

Host C
 User myusername
 HostName c.intranet.mycompany.com
 ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 && nc %h %p'

Perhatikan ProxyCommand , di mana:

  • ssh -T -q menunjukkan bahwa seharusnya tidak mengalokasikan pseudo-TTY (-T ) dan diam (-q );
  • sekali pada jump host B , kami menambahkan kunci ke kunci SSH dari A melalui ssh-add;
  • yang hanya berfungsi karena kami meneruskan agen SSH menggunakan -o 'ForwardAgent yes' .
  • ssh-add -t 1 menunjukkan bahwa saya ingin kunci ditambahkan hanya untuk 1 detik yang diperlukan untuk mengautentikasi ke host terakhir C;
  • dan terakhir, nc %h %p menginisiasi netcat koneksi ke host terakhir %h di port %p (keduanya akan diisi oleh SSH berdasarkan informasi di ~/.ssh/config berkas).

Jika Anda perlu menentukan kunci khusus pada B untuk digunakan, Anda dapat melakukannya dengan memodifikasi ssh-add bagian:

Host C
 User myusername
 HostName c.intranet.mycompany.com
 ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 ~/.ssh/mykey && nc %h %p'

Linux
  1. SSH tanpa kata sandi menggunakan pasangan kunci publik-swasta

  2. Ssh – Diberikan Kunci Ssh Pribadi, Bagaimana Cara Memulihkan Kunci Publik?

  3. Terhubung ke server dengan menggunakan SSH di Linux atau Mac OS X

  1. Pengaturan otentikasi berbasis SSH Key dari openSSH ke SSH2

  2. Menggunakan jq untuk mengambil nilai kunci dari keluaran json

  3. Dekripsi dari teks sandi yang dienkripsi menggunakan RSA

  1. Login SSH tidak berfungsi menggunakan kunci Tanpa Kata Sandi?

  2. Menggunakan Kunci Pribadi SSH yang Sama di Beberapa Mesin

  3. SSH:Di jaringan pribadi cara mengakses mesin jarak jauh dari mesin sumber tanpa menggunakan kunci publik ssh