Saya berada dalam situasi di mana beberapa pengguna berbagi akun pengguna yang sama di mesin jarak jauh. Saya memiliki direktori "pribadi" tempat saya menulis .zshrc
file saya sendiri , dan saya ingin memiliki cara untuk:
- Mulai sesi ssh di mesin jarak jauh dengan arahan dari file konfigurasi ssh saya (mis.
ControlMaster auto
) - Sesi ini menjalankan shell Z
- Ini menjalankan
.zshrc
direktori "pribadi" saya (bukan pada direktori home pengguna bersama)
Akan menyenangkan untuk memiliki alias atau cara sederhana untuk memulai sesi ssh seperti itu (itu sebabnya saya berpikir untuk menggunakan file konfigurasi OpenSSH), tetapi saya terbuka untuk ide lain!
Menggunakan file konfigurasi OpenSSH?
Saya membaca pada halaman manual ssh_config OpenSSH yang dapat saya gunakan direktif LocalCommand
untuk menentukan perintah yang akan dijalankan secara lokal setelah berhasil terhubung ke server. Ini membuat saya berpikir mungkin ada cara untuk memberi tahu config
file perintah apa yang harus dijalankan dari jarak jauh setelah terhubung ke server, tetapi sepertinya tidak ada.
ssh mycommand
? Dan jika Anda ingin menjalankan beberapa perintah pengaturan sebelum setiap perintah yang datang ssh, mengapa tidak mengkonfigurasi sisi server?.zshrc
di direktori tertentu (yaitu direktori home "pribadi"). Saya mencobassh -t host_name 'zsh & source /path/to/my_zshrc'
tetapi tidak berhasil (saya dapatFPATH variable not defined
, dan saya pikir itu karenazsh
selesai sebelum berjalanmy_zshrc
, apalagi ini tidak memberi saya shell Z)Jawaban:
Cara paling jelas untuk menjalankan perintah dari jauh adalah dengan menentukannya di baris perintah ssh. Perintah ssh selalu ditafsirkan oleh shell pengguna jarak jauh.
Akun bersama pada umumnya adalah ide yang buruk; jika memungkinkan, dapatkan akun terpisah untuk setiap pengguna. Jika Anda terjebak dengan akun bersama, Anda dapat membuat alias:
Jika Anda menggunakan otentikasi kunci publik (lagi, disarankan), Anda dapat menentukan perintah per-kunci di
~/.ssh/authorized_keys
. Lihat jawaban ini untuk penjelasan lebih lanjut. Edit baris untuk kunci Anda di~/.ssh/authorized_keys
server (semua dalam satu baris):sumber
exec
perintah itu. Apaexec zsh
bedanya meneleponzsh
secara langsung? Mengapa ini penting dalam kasus khusus ini?ssh -t [email protected] 'HOME=~/bob; exec zsh'
saya mengertiHOME=~/bob: command not found
. Saya pikir saya aktiftcsh
. Saya mendapatkan masalah yang sama jika saya mencobaHOME=/home/bob
. Saya mencoba bash dan zsh. Adakah petunjuk apa yang menyebabkan hal ini? Akhirnya, akankah sintaks di atas membiarkan saya dengan sesi ssh terbuka? (apa yang saya inginkan). Terima kasih lagi.exec
menggantikan shell asli dengan zsh; tanpazsh
, cangkang asli akan tetap berada dalam memori sampai zsh keluar dan kemudian keluar. Perbedaan utama adalah menghemat sedikit memori, itu tidak terlalu penting. Jika shell login Anda adalah (t) csh, gunakansetenv HOME ~/bob; exec zsh
. Akhirnya, karena zsh dimulai tanpa argumen, Anda mendapatkan sesi shell, seperti yang Anda dapatkan jika Anda hanya berlarissh
dan menjadikan zsh sebagai shell login Anda.exec zsh
perintah?ZDOTDIR
untuk membuat zsh mencari file dot di direktori yang berbeda. Jika Anda memiliki beberapa kontrol atas file dot maka Anda dapat melakukan sesuatu seperti addeval $LC_STARTUP_CODE
ke$ZDOTDIR/.zshrc
dan lulus kode untuk mengeksekusi dalam variabel lingkunganLC_STARTUP_CODE
.Untuk menjalankan perintah dari jarak jauh setelah menghubungkan server, tambahkan file .ssh / config Anda dengan potongan berikut
sumber
LocalCommand
arahannya adalah menjalankan perintah pada shell lokal , bukan pada shell remote .