Server produksi perusahaan saya (FOO, BAR ...) terletak di belakang dua server gateway (A, B). Untuk terhubung ke server FOO, saya harus membuka koneksi ssh dengan server A atau B dengan nama pengguna saya JOHNDOE, kemudian dari A (atau B) saya dapat mengakses server produksi yang membuka koneksi SSH dengan nama pengguna standar (sebut saja WEBBY).
Jadi, setiap kali saya harus melakukan sesuatu seperti:
ssh johndoe@a
...
ssh webby@foo
...
# now I can work on the server
Seperti yang dapat Anda bayangkan, ini merepotkan ketika saya perlu menggunakan scp
atau jika saya perlu dengan cepat membuka banyak koneksi.
Saya telah mengkonfigurasi kunci ssh dan juga saya menggunakan .ssh / config untuk beberapa pintasan.
Saya bertanya-tanya apakah saya dapat membuat beberapa jenis konfigurasi ssh untuk mengetik
ssh foo
dan biarkan SSH membuka / meneruskan semua koneksi untuk saya. Apa itu mungkin?
Edit
Jawaban womble adalah persis apa yang saya cari tetapi tampaknya sekarang saya tidak dapat menggunakan netcat karena itu tidak diinstal pada server gateway.
weppos:~ weppos$ ssh foo -vv
OpenSSH_5.1p1, OpenSSL 0.9.7l 28 Sep 2006
debug1: Reading configuration data /Users/xyz/.ssh/config
debug1: Applying options for foo
debug1: Reading configuration data /etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh a nc -w 3 foo 22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/xyz/.ssh/identity type -1
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug2: key_type_from_name: unknown key type 'Proc-Type:'
debug2: key_type_from_name: unknown key type 'DEK-Info:'
debug2: key_type_from_name: unknown key type '-----END'
debug1: identity file /Users/xyz/.ssh/id_rsa type 1
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug2: key_type_from_name: unknown key type 'Proc-Type:'
debug2: key_type_from_name: unknown key type 'DEK-Info:'
debug2: key_type_from_name: unknown key type '-----END'
debug1: identity file /Users/xyz/.ssh/id_dsa type 2
bash: nc: command not found
ssh_exchange_identification: Connection closed by remote host
sumber
Anda dapat menggunakan perintah ProxyCommand di file ~ / .ssh / config Anda, misalnya untuk menggunakan netcat sebagai relai:
Anda hanya akan menggunakan 'ssh server2'. Informasi halaman manual untuk arahan ini ditemukan di 'man ssh_config'
sumber
Saya lebih suka pendekatan berbeda yang memelihara terowongan pra-otentikasi ke server gateway. Dalam
~/.ssh/config
:Kemudian di
.bashrc
:Jadi untuk terhubung ke foo:
Pertama kali Anda menghubungkannya akan mengotentikasi Anda terhadap "a" dan membuka terowongan ssh latar belakang yang persisten. Panggilan selanjutnya ke "s" akan terbuka hampir secara instan melalui terowongan yang telah diautautkan.
Bagus sekali.
sumber
Jenis fungsionalitas ini ada di versi OpenSSH yang lebih baru dan dapat digunakan dengan melakukan
Di mana
server2
tujuan yang Anda tuju danserver1
merupakan host proxy Anda. Anda dapat membuatnya lebih mudah dengan menggunakanProxyCommand
opsi di konfigurasi ssh Anda, sesuatu seperti:sumber
Ketika
netcat
tidak tersedia di proksi, coba trik ini:Maka Anda harus bisa
ssh foo
.Juga, jika Anda memiliki versi terbaru dari ssh pada (yaitu, dengan
-W
perintah untuk meneruskan input dan output standar), Anda mungkin dapat menggunakan:Akhirnya, hanya karena saya menemukan itu keren (dan bukan karena itu akan bekerja dalam kasus khusus Anda, karena perbedaan nama pengguna), posting blog seorang teman menunjukkan bagaimana membuat hal semacam ini dinamis dan secara rekursif rantai proxy SSH (bersama dengan beberapa hal) itu tidak bekerja dengan baik):
Dan kemudian
ssh machine1/machine2
harus memberi Anda shellmachine2
, diteruskanmachine1
.Saya ingin tahu apakah menggunakan
sed
perintah khusus sebagai gantidirname
danbasename
mungkin tidak menyelesaikan masalah dengan nama pengguna yang berbeda?sumber
Ini bisa dicapai dengan melakukan
ssh -At johndoe@a ssh webby@foo
. The-A
Perintah depan agen ssh Anda (sehingga Anda dapat menghindari untuk re-authenticate pada proxy), sedangkan-t
Memastikan terminal ada di proxy. Fungsi bash berikut mungkin berguna:sumber
Netcat tidak diinstal pada
a
. Ketika Anda menjalankanssh host "command arg"
,command
dieksekusi padahost
, bukan pada mesin lokal Anda.sumber
Sejak OpenSSH 7.3 (2016-08-01)
ProxyJump
opsi dan-J
flag baris perintah yang sesuai telah tersedia untuk memungkinkan tipuan yang lebih sederhana melalui satu atau lebih benteng SSH atau "host melompat".Itu menghilangkan ketergantungan pada
nc
perintah eksternal seperti yang ditemukan dalam solusi Womble .akan membuat koneksi SSH dari workstation Anda ke server gateway
a
sebagai pengguna johndoe dan tunnel sesi SSH untuk meng-host foo untuk pengguna Web dengan itu.Untuk menyederhanakan yang membuat definisi host untuk Anda
~/.ssh/config
dan Anda dapat dengan mudah menjalankannyassh foo
sumber