ssh multi-hop… mengadaptasi perintah ke file konfigurasi ssh

10

Saya mencoba untuk memasukkan perintah multi-hop ssh saya ke file ssh .ssh / config.

Ini adalah grafik koneksi saya: laptop (saya di sini) ------> userver -------> workstation

Saya telah memasukkan kunci rsa publik ssh ke 'userver' dan 'workstation'. Saat ini saya dapat terhubung dengan mengetikkan baris ini:

ssh -A -t userserver@userver ssh -A userworkstation@workstation

Namun saya ingin dapat menggunakan kemampuan file config di ~ / .ssh / config untuk mencapai efek yang sama tetapi menggunakan satu perintah sederhana, yang juga memungkinkan saya untuk melakukan copy cepat dengan 'scp'. Satu-satunya masalah adalah 'userver' tidak memiliki perintah "nc" dan saya tidak memiliki superuser di sana, hanya mengontrol folder rumah saya. Meskipun demikian, saya mencoba beberapa hal:

Saya memiliki file konfigurasi ini di laptop saya (~ / .ssh / config):

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user

Juga file konfigurasi lain di pengguna (~ / .ssh / config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username

Dengan file konfigurasi ini saya dapat terhubung sebagai

ssh -A -t userver ssh -A workstation

yang merupakan perbaikan, tetapi tidak cukup. Saya mencoba menambahkan host lain di konfigurasi laptop saya, seperti ini:

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation

Lalu, ketika saya melakukannya

ssh hop

saya mendapatkan output berikut dengan kesalahan dan tidak dapat terhubung:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found

Ada ide?

labotsirc
sumber

Jawaban:

6

Perintah yang Anda butuhkan adalah ProxyCommand.

Anda harus memasukkan file .ssh / config Anda ke baris ini:

  Host userver
  HostName userver.example.com
  .........    

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22

Sekarang Anda dapat terhubung ke workstation pc dengan cara

  ssh worksation

Jika ini tidak jelas, atau Anda ingin detail lebih lanjut, saya sarankan Anda membaca pengantar yang bagus ini untuk ssh multi-hopping.

Edit:

Anda selalu dapat mendefinisikan alias: di file /home/your_name/.bashrc Anda, tambahkan baris ini:

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 

(Saya telah memasukkan -Xopsi sehingga Anda dapat menjalankan aplikasi grafis pada server jauh, dan melihatnya secara lokal; jika Anda tidak menginginkan ini, cukup jatuhkan -X).

MariusMatutiae
sumber
Hai MariusMatutiae, saya mencoba solusi Anda tetapi seperti yang saya katakan di posting asli node 'userver' tidak memiliki program netcat (nc). Jadi saya mendapatkan kesalahan ini: ssh workstation bash: nc: perintah tidak ditemukan ssh_exchange_identification: Koneksi ditutup oleh host jarak jauh
labotsirc
Tidak bisakah Anda menginstalnya?
MariusMatutiae
Sayangnya tidak, saya tidak memiliki superuser di 'userver', itu sebabnya saya mencoba metode alternatif. Saya tidak mengerti, jika ini berfungsi "ssh -A -t userver ssh -A workstation", mengapa memakai ProxyCommand yang sama tidak?
labotsirc
1
@ labotsirc Saya sedikit mengubah jawaban saya. Semoga bermanfaat. Atau, Anda dapat mencoba menginstal netcat secara lokal (yaitu, hanya untuk Anda!), Menambahkan di baris Proxycommand .... path lengkap ke salinan netcat Anda sendiri. Saya tidak yakin ini berfungsi, karena izin, tetapi Anda dapat mencobanya.
MariusMatutiae
Menyalin biner netcat saya, menghapus opsi -q0 karena memberikan kesalahan, dan sekarang berfungsi! Terima kasih
labotsirc
10

Saya menemukan solusi berikut untuk bekerja jauh lebih baik daripada menggunakan netcat ( nc) seperti pada contoh lainnya. Dengan netcat, koneksi saya sangat lambat dan berulang kali hang sampai saya menekan beberapa tombol. Anda juga tidak perlu menginstal netcat.

Tambahkan yang berikut ke Anda ~/.ssh/config:

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p

Maka Anda dapat ssh seperti ini:

ssh workstation

Perhatikan juga bahwa alasan Anda ProxyCommandtidak bekerja adalah karena Anda tidak mendapatkan apa ProxyCommandyang berhasil. ProxyCommandharus membuat pipa yang sshdapat membuat koneksi SSL. Dengan kata lain, perintah harus memulai proses yang stdin dan stdout terhubung sshke sshdport. Dalam konfigurasi Anda, Anda membuat koneksi ssh ProxyCommandyang menghubungkan sshke shell perintah daripada ke sshdport.

jcoffland
sumber