Cara normal untuk terhubung ke server SSH adalah ssh username@ip_address
. Tetapi pengguna mungkin hanya ingin menjalankan program pada mesin jarak jauh. Jadi nama program mengikuti setelah argumen normal yaitu ssh username@ip_address <program_name>
. Sebagai contoh ssh username@ip_address ls
,. Argumen itu baik-baik saja kecuali untuk program interaktif (yang juga menerima input pengguna serta memberikan output) misalnya top
. Outputnya adalah
Variabel lingkungan JANGKA tidak diatur.
yang berarti tidak ada terminal (pseudo-) terpasang antara sshd dan program-program top. Solusinya adalah menambahkan argumen di -t
mana seluruh perintah sekarang menjadi ssh -t username@ip_address top
.
Pertanyaan saya adalah mengapa tidak bisa sshd secara default juga menggunakan pseudo-terminal untuk berkomunikasi dengan program non-interaktif sehingga tidak perlu menambahkan -t
argumen untuk program interaktif?
RequestTTY yes
(atauforce
) di konfigurasi Anda.top
bisa berjalan dalam mode batch.Jawaban:
Memang benar bahwa, seperti yang dikatakan orang lain, PTY memiliki overhead tertentu - tetapi alasan utama untuk tidak menggunakan PTY ketika menjalankan perintah jarak jauh adalah bahwa Anda kehilangan informasi.
Biasanya, ketika Anda menjalankan perintah dari jarak jauh melalui ssh, perintah
stdout
danstderr
aliran dikirim ke lokalstdout
danstderr
, yang berarti Anda dapat mengarahkan / memipangnya secara terpisah - misalnya:Tetapi jika Anda menggunakan PTY, semua keluaran menjadi
stdout
, karena PTY tidak memiliki aliran terpisah untuk keluaran / kesalahan:sumber
-t
seharusnya default, dan opsi yang diperlukan untuk mematikannya, jadi benar-benar keuntungan kinerja kecil adalah yang paling masuk akal bagi saya untuk kasus-kasus di mana itu tidak masalah.Halaman manual untuk
ssh
menjelaskan ini:Ini fitur dan mungkin disebabkan oleh alasan historis
rsh
perilaku. Cukup masuk akal. Sebagian besar perintah benar-benar tidak interaktif dan bukan operasi gratis untuk mengalokasikan PTY (yang lebih penting 20 tahun yang lalu).sumber
rsh
tidak jelas karena program itu tidak memiliki opsi yang sesuai.rsh
, tetapi pasti ada beberapa pengaruh, tidak dalam opsi, tetapi dalam perilakursh
danrlogin
(jika ada perintah atau tidak). Anda tidak dapat menjalankan perintah interaktif (seperti rogue (6) atau vi (1)) menggunakan rsh; gunakan rlogin (1) sebagai gantinya. .Bagaimana Anda
ssh
bisa tahu apakah perintah yang Anda gunakan interaktif atau tidak?Mimpi buruk ini menjadi lebih buruk ketika Anda menyadari bahwa Anda bisa masuk ke mesin yang menjalankan OS non-unix.
Karena tidak ada solusi yang mudah, satu case harus menjadi default.
sumber