ssh melalui banyak host

37

Untuk sampai ke mesin saya di kantor saya, saat ini saya sedang melakukan ini:

me@home:~$ ssh unix.university.com
me@unix:~$ ssh unix.department.univeristy.com
[email protected]:~$ ssh office-machine.department.university.com
me@office-machine:~$ echo "This is very annoying"

Apakah ada cara mudah untuk mengotomatisasi proses ini, mungkin satu perintah yang dapat saya gunakan di akhir saya?

Lucas
sumber

Jawaban:

31

Anda dapat menggunakan klien ssh untuk menjalankan ssh pada mesin jarak jauh saat login.

ssh -t unix.university.com \
    ssh -t unix.department.univeristy.com \
    ssh -t office-machine.department.university.com

(Alasan saya memasukkan -tdalam doa adalah karena ssh memberi saya kesalahan kembali: stdin tidak menjadi terminal ketika saya mencobanya di komputer saya sendiri; mesin Anda mungkin berbeda.)

Saat Anda keluar dari shell terakhir, proses akan berantai keluar, menghemat Anda mengetik Ctrl-Dberulang-ulang.

amphetamachine
sumber
Harap dicatat: tambahkan saja "-t" jika Anda baru saja login pada mesin jarak jauh. Untuk memulai perintah pada mesin jarak jauh, JANGAN taruh mereka karena mereka dapat / akan merusak beberapa hal (untuk contoh tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " :: bisa menjadi rusak jika Anda menambahkan -t! Lihat untuk mencontoh jawaban StephaneChazelas yang luar biasa ini unix.stackexchange.com/questions/151916/ ... )
Olivier Dulac
3
Menggunakan -J lebih aman daripada jawaban ini, karena Anda kemudian memiliki kemungkinan untuk menyimpan semua kunci ssh di komputer lokal Anda. Opsi -J diperkenalkan dalam versi openshs 7.3 sebagaimana disebutkan dalam jawaban dari @Miikka
Erik Sjölund
1
@ ErikSjölund Openssh tidak mengizinkan lebih dari satu -Jopsi. Saya pikir Anda bisa melakukannya dengan beberapa ProxyCommandopsi di konfigurasi Anda.
amphetamachine
1
@amphetamachine With -JAnda dapat menentukan daftar hop yang dipisahkan koma untuk dilalui. Tetapi menggunakan ProxyCommanddengan -Wmasih merupakan pendekatan yang jauh lebih baik daripada jawaban ini jika Anda menggunakan versi yang terlalu tua untuk didukung -J.
kasperd
35

Ya, ada cara yang bagus untuk melakukannya menggunakan ssh ProxyCommand dan netcat

Letakkan sesuatu seperti ini di .ssh / config Anda

Host *.department.university.com
User me
ForwardAgent yes
ProxyCommand ssh unix.university.com nc %h %p

Ini akan masuk langsung ke server .department.university.com menggunakan host jump / bastion unix.university.com. Anda juga mungkin memerlukan bait untuk unix.university.com secara langsung.

Berikut ini tautan yang menjelaskan cara kerjanya: http://backdrift.org/transparent-proxy-with-ssh

Dengan teknik ini, Anda sekarang bisa menulis

ssh unix.department.university.com

dan semuanya akan langsung muncul. Alat-alat seperti rsync, scp, dll (apa pun di ssh stack) juga akan berfungsi secara transparan.

Aaron Brown
sumber
2
+1 Saya menggunakan sesuatu yang mirip dengan ini untuk mendorong data dari jaringan uji ke jaringan prod melalui server staging.
Arcege
2
Yup, ini bekerja dengan baik!
gabe.
15
Hanya untuk merekam versi yang lebih baru dari ssh mendukung -Wopsi, Anda dapat melakukan sesuatu seperti ProxyCommand ssh -W %h:%p gatewaybukannya bergantung pada nc
Ulrich Dangel
Senang mendengarnya! Thx
Aaron Brown
2
berfungsi dengan baik jika nama pengguna sama di seluruh mesin; jika berbeda Anda harus melakukan sesuatu sepertiProxyCommand ssh -W %h:%p user@gateway
Riccardo Cossu
9

Dalam OpenSSH 7.3, ssh menambahkan -Jbendera baris perintah dan yang sesuaiProxyJump opsi konfigurasi yang untuk menyelesaikan masalah ini dengan tepat.

Berikan host yang ingin Anda ssh sebagai daftar yang dipisahkan koma -J. Sebagai contoh:

ssh -J unix.university.com,unix.department.university.com  \
  office-machine.department.university.com
Miikka
sumber
-5

Penerowongan SSH. Saya tidak ingat persis bagaimana melakukan ini, tetapi saya tahu ada cara untuk dasarnya memiliki mesin yang memungkinkan terowongan dengan menghubungkan ke port yang terpisah. Dengan begitu Anda cukup shell ke mesin awal yang sama (dengan port yang berbeda misalnya) dan itu akan menjatuhkan Anda di lokasi akhir Anda.

Akan harus mencari cara mengkonfigurasinya.

:)

Anthony Hurst
sumber
Anda tidak ingin (dan mungkin Anda tidak bisa) membuka port atau gateway ssh universitas Anda ...
Stéphane Gimenez
9
Jika Anda tidak tahu cara melakukannya, dan tidak dapat diganggu untuk mencarinya, mengapa Anda mengirim jawaban ini?
amphetamachine
4
Bukan jawaban
gabe.