Saya terhubung ke sejumlah mesin terus-menerus, dari lokasi fisik yang berbeda (dan dengan demikian mesin fisik yang berbeda). Sebagian besar ini dilakukan meskipun ssh, kadang-kadang mesin gateway atau dua diperlukan (yang aku memanggil via ProxyCommand
di ~/.ssh/config
). Saya ingin tahu apakah ada metode untuk mengidentifikasi IP atau nama host dari mesin yang memanggil koneksi awal (yaitu mesin yang sedang saya kerjakan) di ujung jarak jauh?
- Saya tidak ingin mengirim variabel lingkungan karena beberapa mesin saya tidak memiliki root untuk mengatur
PermitUserEnvironment
. - The
$SSH_CLIENT
variabel lingkungan ini berguna untuk sambungan langsung, tetapi hanya berisi daftar gateway terbaru.
Ide saya saat ini untuk sebuah solusi adalah untuk meraih $SSH_CLIENT
, ssh untuk itu, menemukan $SSH_CLIENT
nilai mesin itu dan ulangi sampai tidak ada; kemudian ambil nama host dan tarik kembali entah bagaimana.
Sepertinya sedikit pekerjaan hack; apakah ada yang punya metode yang lebih baik?
Saya bekerja di bash shell kebanyakan, tapi saya juga senang atas saran yang tidak menggunakannya juga.
sumber
Jawaban:
Saya belum pernah mencoba, tetapi saya bisa memikirkan sesuatu yang mungkin berhasil: Anda jangan biarkan SSH memulai shell login Anda, tetapi ambil masalah di tangan Anda sendiri. Anda dapat memberitahu SSH untuk menjalankan perintah sewenang-wenang. Dari pada
Anda akan menjalankan sesuatu di sepanjang baris
Apa yang dilakukan adalah, ini memberi SSH sesuatu yang lain untuk dilakukan alih-alih meluncurkan shell login. Sesuatu itu adalah string, yang akan dijalankan sebagai perintah, dari jarak jauh. Kami menggunakan ini untuk meluncurkan shell dengan cara yang sangat spesial: kami memberikannya variabel lingkungan
DAT_ORIGIN_HOST
, yang berisi ip kami pada eth0 (Anda mungkin perlu mengubahnya).Trik yang kami lakukan adalah kami menempatkan perintah untuk menjalankan dari jarak jauh dalam qoutes ganda
"
. Kutipan ganda (setidaknya dalam Bash) berarti, SEBELUM STRING DILALU KE SSH, shell kami memindai dan melakukan ekspansi / penggantian, jika perlu. Ini berarti shell kami akan mengevaluasi bagian `$ (ifconfig ...), ke alamat ip kami saat ini dan meneruskan sebuah string yang berisi definisi untuk variabel lingkungan dengan alamat ip lokal kami.Setelah masuk ke mesin jarak jauh,
echo $DAT_ORIGIN_HOST
harus mencetak alamat IP Anda.Untuk mengembangkan panggilan itu ke SSH, saya tanpa malu-malu mengambil dari sini untuk mengekstraksi alamat IP dan di sini untuk -t dan bagaimana meluncurkan sesuatu yang interaktif
Penafian: Saya tidak yakin tentang opsi
-l
dan-i
untuk/bin/bash
. Mungkin Anda perlu menghilangkannya.sumber
Id saya mengerti benar Anda koneksi langsung dari mesin asal ke tujuan dengan
proxycommand
hop. Dan inilah tiga retas untuk Anda (ketiga ditambahkan setelah komentar pada skenario penggunaan). Pertama) Gunakan penerusan port jarak jauh untuk memungkinkan Anda kembali ke mesin asal Anda-R remotemachineport:dstonlocalnet:dstportonlocalnet
Kedua) Penyalahgunaan
AcceptEnv LC_*
target. Ini tidak baik tetapi cukup umum untuk mengizinkan variabel LOCALE bahkan ketika AcceptUserEnviconment tidak tersedia. Jadi sekarang Anda bisa melakukannya:Ketiga) Gunakan ssh remote forward untuk mengidentifikasi tipe host atau host.
Sekarang terhubung dengan port forwarding:
sumber
AcceptEnv LC_*
secara umum diizinkan, tetapi bukan standar, diaktifkan oleh pengaturan default?AcceptEnv
direktif di/etc/ssh/sshd_config
. Ingatlah untuk memulai kembalisshd
jika file ini diubah.Anda dapat mengetik
who -m
di ujung jarak jauh untuk mendapatkan informasi tentang pengguna yang saat ini masuk (termasuk nama host).who
memberi Anda informasi tentang pengguna yang masuk, dan-m
sakelar ini menunjukkan "hanya nama host dan pengguna yang terkait dengan stdin".sumber
Apakah Anda mencoba yang berikut ini?
sumber