Jawaban:
Secara default, ketika Anda menjalankan perintah pada mesin jarak jauh menggunakan ssh, TTY tidak dialokasikan untuk sesi jarak jauh. Ini memungkinkan Anda mentransfer data biner, dll. Tanpa harus berurusan dengan kebiasaan TTY. Ini adalah lingkungan yang disediakan untuk perintah yang dieksekusi pada computerone
.
Namun, ketika Anda menjalankan ssh tanpa perintah jarak jauh, itu TIDAK mengalokasikan TTY, karena Anda cenderung menjalankan sesi shell. Ini diharapkan oleh ssh otheruser@computertwo.com
perintah, tetapi karena penjelasan sebelumnya, tidak ada TTY tersedia untuk perintah itu.
Jika Anda ingin shell aktif computertwo
, gunakan ini, yang akan memaksa alokasi TTY selama eksekusi jarak jauh:
ssh -t user@computerone.com 'ssh otheruser@computertwo.com'
Ini biasanya sesuai ketika Anda akhirnya menjalankan shell atau proses interaktif lainnya di akhir rantai ssh. Jika Anda akan mentransfer data, itu tidak tepat atau diperlukan untuk menambahkan -t
, tetapi kemudian setiap perintah ssh akan berisi perintah penghasil data atau -konsumen, seperti:
ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'
Ada cara yang lebih baik untuk menggunakan SSH sebagai relay: gunakan ProxyCommand
opsi. Anda harus memiliki kunci pada mesin klien yang memungkinkan Anda masuk ke komputer kedua (kunci publik adalah cara yang disarankan untuk menggunakan SSH dalam sebagian besar keadaan). Masukkan ini ke dalam ~/.ssh/config
dan jalankan ssh computertwo
.
Host computerone
HostName computerone.com
UserName user
Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p
nc
adalah netcat . Salah satu dari beberapa versi yang tersedia akan dilakukan.
Anda dapat menggunakan opsi PROXY Jump di ssh
-J [user@]host[:port]
Connect to the target host by first making a ssh connection to the jump host and then establishing a TCP forwarding to the ultimate destination from there. Multiple jump hops may be specified
separated by comma characters. This is a shortcut to specify a ProxyJump configuration directive.
Jadi jika saya perlu terhubung ke hostB tapi saya harus melalui hostA dulu untuk sampai ke sana. Biasanya saya mau
ssh hostA
[user@hostA ~]$ ssh hostB
Saya sekarang melakukan ini
ssh -J hostA hostB
[user@hostB ~]$
Anda dapat mengganti opsi konfigurasi SSH "RequestTTY" dari baris perintah.
Contoh kerja saya cd-serv-one.sh
mulai /bin/bash
dalam sesi SSH setelah menjalankan beberapa perintah:
#!/bin/bash
ssh -o "requestTTY=yes" User@ExampleHostName "cd /home/myPathFoo/myPathBar; /bin/bash"
Dan sekarang saya hanya menjalankan ./cd-serv-one.sh
untuk memulai sesi SSH yang dibutuhkan.
ssh
!