Server Lokal Gateway Host Jump Bastion Host

0

Saya ingin ssh ke host pribadi jarak jauh menggunakan server perantara (bastion, jump, gateway). Perintah ini berfungsi dengan baik:

ssh gateway ssh private

Dengan pengaturan ~ / .ssh / config ini:

Host gateway
  User gateway-user
  HostName XX.XX.XX.XX
  RequestTTY force

Bagaimana saya bisa menerapkan ini di ~ / .ssh / config saya? Saya sudah mencoba berbagai iterasi ProxyCommand tanpa hasil. Saya ingin menggunakan file identitas yang terletak di host gateway untuk mengakses host pribadi. Saya ingin dapat melakukan:

ssh private

Saya mengetahui teknik yang dijelaskan di sini, tetapi membutuhkan kunci publik saya untuk berada di semua host pribadi, tetapi saya tidak ingin itu:

http://www.lorrin.org/blog/2014/01/10/one-liner-ssh-via-jump-box-using-proxycommand/

Shaun
sumber

Jawaban:

0

Pertama, konfigurasikan kunci ssh Anda di gateway sehingga Anda dapat ssh ke pribadi. Kemudian pada klien Anda, buat pasangan kunci pribadi / publik terpisah yang Anda gunakan untuk mengautentikasi di gateway. Misalnya. ssh-keygen -t rsa -f id_gateway.

Kemudian di gateway, gunakan command= sintaks dalam file otor_keys Anda. Misalnya, entri Anda mungkin terlihat seperti ini:

command="sh -c 'ssh private ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3....

Cari halaman sshd untuk command="command" untuk info lebih lanjut. Pastikan untuk menambahkan kunci id_gateway.pub ke baris ini. Kemudian di .ssh/config pada klien Anda, tambahkan entri seperti ini:

Host private
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

Sekarang, dari klien Anda, Anda seharusnya bisa ssh private dan langsung masuk. Ini bahkan berfungsi untuk scp dan sftp.

Kredit tambahan

Jika Anda ingin menggunakan ini untuk beberapa server, tetapi hanya ingin mengelola satu kunci publik di gateway, Anda dapat menggunakan trik berikut. sshd secara default hanya mengizinkan variabel tertentu yang akan diterima dari lingkungan lokal. Salah satunya adalah LC_PAPER yang jarang digunakan untuk apa pun. Jadi kita bisa menggunakannya untuk menyampaikan nama host server sebagai berikut:

Pertama, ubah entri kunci publik menjadi

command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...

Kemudian pada klien Anda, tambahkan fungsi ke .bashrc file (atau shell apa pun yang Anda gunakan) yang terlihat seperti ini:

ssh_proxy() {
  LC_PAPER=$1 /usr/bin/ssh $*
}

Kemudian buat alias untuk jika Anda ingin:

alias ssh=ssh_proxy

Akhirnya, tambahkan Host bagian ke Anda .ssh/config seperti yang ditunjukkan di atas. sebagai contoh:

Host private2
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

Sekarang Anda harus bisa melakukannya ssh private dan ssh private2 hanya dengan satu kunci publik di gateway.

gogators
sumber
Ini di sepanjang garis yang benar. Bagaimana saya bisa SSH ke beberapa host pribadi dan hanya memiliki 1 kunci publik yang disimpan di gateway? Apakah ada cara untuk menyampaikan nama host yang diminta?
Shaun
Saya memperbarui jawaban saya untuk mengatasinya.
gogators
Apakah ada cara untuk menjaga ini terkandung dalam file .ssh / config. Juga, akan ideal jika tuan rumah dapat berbagi satu entri.
Shaun
Nggak. Anda tidak dapat memasukkan variabel env ke dalam .ssh/config. Anda bisa menjalankannya secara manual LC_PAPER=private ssh private. Jika Anda menggunakan Host * blokir di akhir .ssh/config Anda hanya perlu 1 entri. BTW, mengapa Anda tidak bisa memiliki beberapa kunci privat / publik? Akan jauh lebih mudah.
gogators
Saya dapat scp untuk bekerja seperti ini: scp_proxy () {LC_PAPER = echo "$1" | cut -f1 -d":" / usr / bin / scp $ *} alias scp = scp_proxy
Shaun