ssh_config: tentukan perintah yang akan dieksekusi pada mesin jarak jauh saat login


16

Ini adalah perluasan dari pertanyaan saya sebelumnya . Saya perlu menjalankan perintah yang disimpan secara lokal (yaitu mount /home) pada mesin jarak jauh setelah login ssh. Saat ini, saya menggunakan:

ssh -t mymachine.example.com 'mount /home ; /bin/bash'

yang berfungsi dengan baik, tapi saya bertanya-tanya apakah saya bisa memasukkan perintah ini ke saya .ssh/configsehingga saya tidak perlu mengetiknya setiap waktu. Saya menemukan LocalCommandopsi, tetapi saya tidak melihat RemoteCommandopsi apa pun .

Ini diimpor dan command-to-be-executeddisimpan di mesin lokal, karena akan berisi kata sandi untuk membuka disk terenkripsi. Itulah alasan mengapa saya tidak bisa memasukkan perintah ke .profiledalam mesin remote.

Jawaban:


6

Pertanyaan ini telah ditanyakan sebelumnya pada SuperUser. Jawaban pertama menggunakan file jarak jauh yang tidak sesuai dengan kebutuhan Anda, tetapi jawaban kedua yang menyarankan untuk menggunakan alias lokal bisa menjadi solusi untuk masalah Anda.

Ini adalah impor dan bahwa perintah yang akan dieksekusi disimpan pada mesin lokal, karena akan berisi kata sandi untuk membuka disk yang dienkripsi. Itulah alasan mengapa saya tidak bisa memasukkan perintah ke. Profil pada mesin remote.

Ini mungkin tidak aman. Jika saya menggunakan echoperintah sebagai perintah ssh, itu muncul di psserver jauh:

martin@martin ~ % ssh dev2 "echo hello; ps aux|grep echo"

hello
root     25358  0.0  0.0   5848  1296 ?        Ss   11:27   0:00 bash -c echo hello; ps aux|grep echo
root     25362  0.0  0.0   5012   828 ?        S    11:27   0:00 grep echo

terima kasih, tetapi dalam solusi pada SuperUser ~/.ssh/rcdisimpan lagi di mesin jarak jauh. Mengenai komentar Anda tentang psmenampilkan parameter baris perintah saya (termasuk kata sandi), itu tidak mengganggu saya. Ini adalah mesin jarak jauh yang tidak saya percayai. Mesin lokal saya hanya digunakan oleh saya sendiri, jadi tidak ada orang lain yang memiliki akses ke ps.
Martin Vegter

6
Itu pskeluaran adalah dari mesin remote. Intinya adalah: semua yang Anda berikan sshsebagai perintah jarak jauh akan muncul di server jarak jauh di ps.
Martin von Wittich

1
Ya kamu benar. Terima kasih telah menunjukkan ini.
Martin Vegter

1
@MartinvonWittich - Setiap situs SE independen sehingga sepenuhnya dapat diterima untuk setiap situs memiliki Q dan A yang sama selama mereka berada di topik untuk situs tertentu. Sebaiknya salin konten jika Q muncul dan A ada di situs SE lainnya. Kustomisasi sesuai kebutuhan sehingga sesuai topik.
slm

7

Ini ditambahkan di OpenSSH 7.6:

tambahkan opsi RemoteCommand untuk menentukan perintah dalam file konfigurasi ssh alih-alih memberikannya pada baris perintah klien. Ini memungkinkan file konfigurasi untuk menentukan perintah yang akan dijalankan pada host jarak jauh.

ref: https://www.openssh.com/txt/release-7.6


6
RequestTTY yes
RemoteCommand screen -UDr

Bagus!! Terima kasih!!
semak

2

Anda dapat melakukan ini dengan kerja sama mesin jarak jauh sebagai berikut.

Di mesin lokal Anda, masukkan perintah untuk dijalankan di variabel lingkungan LC_SSH_INITIAL_COMMAND. SSH biasanya dikonfigurasi untuk melewati semua variabel lingkungan dari formulir LC_*, karena itu biasanya pengaturan lokal.

Pada mesin jarak jauh, jalankan eval "$LC_SSH_INITIAL_COMMAND" melalui pengaturan per-key di~/.ssh/authorized_keys atau dari ~/.ssh/rc(berhati-hatilah bahwa jika Anda memiliki ~/.ssh/rcfile, Anda perlu berhati-hati menjalankan xauthsecara manual untuk penerusan X11).

Dengan authorized_keysmetode ini, Anda juga dapat menjalankan perintah ketika sesi SSH keluar (kecuali jika proses shell terbunuh secara mendadak; Anda setidaknya harus menjebak sinyal HUP sehingga perintah Anda dieksekusi meskipun koneksi mati).

Namun hal ini tidak pengaturan yang baik untuk melakukan sesuatu global seperti pemasangan filesystem. Anda harus berhati-hati untuk tidak me-mount lagi jika filesystem sudah di-mount (misalnya karena perintah SSH yang berjalan bersamaan), dan tidak meng-unmount saat logout. Rekomendasi saya untuk use case ini adalah tetap melakukan pemasangan secara eksplisit, kemudian jalankan perintah remote tanpa melakukan sesuatu yang istimewa, dan unmount ketika Anda tidak lagi ingin mengakses sistem file itu.


0

Saya belum mencobanya tetapi pendekatannya bisa

  • Nyatakan a Subsystempada remote sshd_configyang menjalankan perintah yang Anda inginkan dengan membaca beberapa env vars
  • Gunakan SendEnvpada lokal .ssh/configuntuk meneruskan kunci tersebut ke server jauh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.