Apakah ada cara untuk memaksa SSH menggunakan shell tertentu pada ujung jarak jauh, terlepas dari apa shell default pengguna?
Saya sudah mencoba solusi yang mirip dengan:
ssh host.domain.com /bin/bash -c 'complicated, multi-line command'
tetapi sayangnya shell default pada ujung jarak jauh bertanggung jawab untuk mem-parsing bagian "rumit, perintah multi-line", dan saya mengalami kesulitan untuk menghindarinya agar berfungsi baik untuk pengguna shell Bash dan C.
ssh
bash
shell
command-line-interface
Plinehan
sumber
sumber
Jawaban:
Saya tidak percaya ini mungkin, setidaknya dengan sistem berbasis openssh. Jika Anda memiliki kemampuan, solusi yang lebih baik mungkin dengan sftp file shell-script, dan kemudian jalankan dengan metode yang Anda posting. Itu akan memiliki keuntungan meminimalkan jumlah pelarian yang diperlukan, tetapi akan meninggalkan file di belakang yang harus dihapus (mungkin sebagai langkah terakhir dari skrip).
sumber
Gunakan heredoc:
sumber
cat /tmp/tempfile_containing_your_script ssh ${hostname} /bin/bash
. Jadi alih-alih satu langkah Anda memiliki dua langkah: langkah 1 salin skrip Anda ke file, langkah 2cat
skrip untukssh
.Gunakan login berbasis kunci, bukan berbasis kata sandi. Kemudian Anda dapat menambahkan (daftar) "perintah paksa" ke kunci ssh publik Anda (dalam bidang "opsi" untuk SSH1) yang diinstal pada server (dalam file ~ / .ssh / Authorized_key untuk SSH1 , ~ / .ssh2 / otorisasi untuk SSH2).
Buat perintah paksa Anda sehingga shell yang Anda inginkan disebut ...
Lebih lanjut: Anda dapat mengaitkan paling banyak satu perintah paksa ke kunci yang diberikan. Jika Anda memerlukan beberapa perintah paksa untuk tujuan yang berbeda, Anda harus mengatur kunci yang berbeda. (Tentu saja Anda dapat memasukkan banyak hal ke dalam satu skrip, yang Anda panggil melalui perintah paksa. Namun perlu diketahui bahwa perintah paksa selalu dijalankan untuk akun / kunci yang diberikan jika pengguna masuk, terlepas jika ia meminta sesuatu yang berbeda untuk dijalankan. Jika Anda ingin tetap menghormati perintah asli yang diminta, lihat bagaimana cara mengeksploitasi
$SSH_ORIGINAL_COMMAND
variabel ...)Baca tentang "perintah paksa" melalui Google .
sumber
/etc/sshrc
.Anda dapat menggunakan
-t
opsi untuk memaksa alokasi pseudo-tty untuk program yang ingin Anda mulai, seolah-olah Anda sedang menjalankan shell standar. Kemudian berikan shell yang Anda inginkan sebagai argumen lama.Dengan teknik ini Anda tidak hanya dapat menggunakan shell apa pun yang diinstal tetapi Anda juga dapat membuka vim dan program lain yang membutuhkan TTY, dari satu perintah. Yang keren jika Anda menulis skrip shell yang mencatat Anda di suatu tempat dan membuka file di vim, atau htop atau sesuatu.
Tidak yakin apakah ini shell login tetapi ada opsi untuk membuat bash bertindak seperti shell login, jadi shell Anda mungkin juga memilikinya.
sumber
Anehnya saya melihat hasil yang berbeda dengan yang berikut:
jalankan di dash:
vs bash:
Menampilkan perintah yang dikutip sepenuhnya berfungsi seperti yang diharapkan.
sumber
sh -c "$*"
. Jadi, Anda berlarish -c "/bin/bash -c echo <(cat)"
; yangecho
perintah itu sendiri adalah satu-satunya argumen dilewatkan ke-c
, dan<(cat)
merupakan argumen yang terpisah sama sekali.Saya menghadapi situasi yang sama beberapa waktu lalu di mana saya perlu menggunakan ksh coprocess untuk sqlplus dan saya hanya punya ssh melalui mana membaca dan menulis harus dilakukan.
Cara untuk melakukan ini adalah menyalurkan semua perintah dependen Anda ke dalam satu baris (gunakan;) ke / usr / bin / ksh pada mesin jarak jauh. sebagai contoh:
sumber