Pengaturan file konfigurasi ssh yang benar ke tunnel ke mesin ke-3

19

Saya mencoba untuk tunnel ke server melalui server jembatan. Sejauh ini, saya sudah bisa membuatnya bekerja dari shell perintah dengan benar menggunakan perintah berikut:

ssh -A -t bridge_userid@bridgemachine.com ssh -A remote_userid@remoteserver.com

Tapi saya sudah mencoba untuk membungkus ini ke dalam ~/.ssh/configfile saya dan saya punya masalah. Saya sudah mencoba:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -A -t bridge_userid@bridge_userid.com ssh -A remote_userid@%h

Tetapi ketika saya melakukannya, saya mendapatkan pesan kesalahan berikut remoteserver.comdan saya tidak yakin apa yang menyebabkannya:

ksh: SSH-2.0-OpenSSH_6.8 ^ M: tidak ditemukan

Saya tahu bahwa ketika saya masuk remoteserver.com, shell saya adalah /usr/bin/ksh.

Saya sudah mencoba menambahkan argumen path ke perintah ssh dalam file konfigurasi, tetapi tidak ada bedanya.

Ada ide apa itu?

Eric B.
sumber
Hanya saja bukan bagaimana ProxyCommandseharusnya digunakan. Biasanya ini digunakan dengan netcat di mana ssh memipis outputnya melalui itu dan netcat bertindak sebagai terowongan ke port SSH remote - remote . Anda memerlukan sesuatu seperti ProxyCommand ssh -W %h:%p [email protected]jika Anda ingin menggunakan fitur itu.
DanSut
Sayangnya server jembatan saya tidak memiliki netcat yang diinstal di atasnya, jadi saya mencoba untuk membuatnya bekerja dengan cara lain. Saya pikir jika itu bisa bekerja dari baris perintah, harus ada cara untuk memasukkan info dalam file konfigurasi.
Eric B.
Dalam penggunaan baris perintah yang berfungsi, Anda memberi ssh -A [email protected]sebagai perintah untuk dijalankan di mesin bridge, config tidak memberi Anda cara untuk memasok perintah default. Apa yang Anda coba lakukan workssendiri tetapi kemudian ssh mencoba menggunakan Anda ProxyCommandsebagai sebuah terowongan dan mulai menembakkan protokol SSH ke bawah di mana ada shell menunggu di ujung daripada sshd mendengarkan protokol SSH.
DanSut
@dansut bekerja dengan sangat baik. Terima kasih!
Eric B.

Jawaban:

24

Jawaban Jakuje benar, tetapi sejak OpenSSH 7.3, Anda sekarang dapat menggunakan -J ProxyJumpyang lebih mudah. Lihat catatan saya:

OpenSSH 7.3atau lebih tinggi

Gunakan ProxyJump. Seperti yang dijelaskan dalam manual:

-J [user @] host [: port]
Hubungkan ke host target dengan terlebih dahulu membuat koneksi ssh ke host melompat dan kemudian membuat penerusan TCP ke tujuan akhir dari sana. Beberapa lompatan hop dapat ditentukan dengan dipisahkan oleh karakter koma. Ini adalah jalan pintas untuk menentukan arahan konfigurasi ProxyJump.

~/.ssh/configContoh ProxyJump

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2_behind_server1
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyJump server1

Terhubung dengan

ssh server2_behind_server1 -v

Tambahkan -vuntuk keluaran verbose

Contoh -Jbaris perintah ProxyJump

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa

Terhubung dengan

ssh server2 -J server1 -v

Atau gunakan -o

ssh server2 -o 'ProxyJump server1' -v

OpenSSH 5.4atau lebih tinggi

Gunakan ProxyCommanddengan-W

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 -W %h:%p

Terhubung dengan

ssh server2 -v

Atau gunakan -o

ssh server2 -o 'ProxyCommand ssh server1 -W %h:%p' -v

OpenSSH di bawah 5.4

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 nc %h %p 2> /dev/null

Terhubung dengan:

ssh server2 -v

Atau gunakan -o

ssh server2 -o 'ProxyCommand ssh server1 nc %h %p 2> /dev/null' -v

Sumber

-Jditambahkan dalam OpenSSH 7.3

  • ssh (1): Tambahkan opsi ProxyJump dan bendera -J baris perintah yang sesuai untuk memungkinkan tipuan yang disederhanakan melalui satu atau lebih benteng SSH atau "host melompat".

-Wditambahkan dalam OpenSSH 5.4

  • Menambahkan 'mode netcat' ke ssh (1): "ssh -W host: port ..." Ini menghubungkan stdio pada klien ke satu port forward di server. Ini memungkinkan, misalnya, menggunakan ssh sebagai ProxyCommand untuk merutekan koneksi melalui server perantara. bz # 1618
GabLeRoux
sumber
3

Anda tidak perlu netcatdi jembatan Anda. Seperti DanSut yang diusulkan dalam komentar, Anda dapat menggunakan ssh -Wopsi baris perintah sebagai gantinya, konfigurasi ini akan bekerja untuk Anda:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -AW %h:%p bridge_userid@bridge_userid.com
Jakuje
sumber
Itu berhasil. Terima kasih. Tidak yakin mengapa, tetapi saya yakin saya telah mencobanya sekali sudah gagal, tetapi saya mencoba lagi dengan sukses. Terima kasih.
Eric B.