Saya mencoba ssh
mengubah secara otomatis ke direktori tertentu ketika saya masuk. Saya mencoba agar perilaku itu bekerja menggunakan arahan berikut di ~/.ssh/config
:
Host example.net
LocalCommand "cd web"
tetapi setiap kali saya masuk, saya melihat yang berikut:
/bin/bash: cd web: No such file or directory
meskipun meskipun pasti ada web
folder di direktori home saya. Bahkan menggunakan jalur absolut pun memberikan pesan yang sama. Untuk menjadi jelas, jika saya mengetik cd web
setelah masuk saya mendapatkan ke folder yang tepat.
Apa yang kulewatkan di sini?
SUNTING:
Kombinasi kutipan / jalur absolut yang berbeda memberikan pesan kesalahan yang berbeda:
LocalCommand "cd web"
/bin/bash: cd web: No such file or directory
LocalCommand cd web
/bin/bash: line 0: cd: web: No such file or directory
LocalCommand cd /home/gareth/web
/bin/bash: line 0: cd: /home/gareth/web: Input/output error
Ini membuat saya berpikir bahwa tanda kutip tidak boleh ada di sana, dan bahwa ada kesalahan lain terjadi.
Jawaban:
cd adalah builtin shell. Perintah Local dijalankan sebagai:Apa yang Anda ingin lakukan tidak dapat sepenuhnya dicapai melalui SSH; Anda perlu memodifikasi shell dengan beberapa cara, misalnya melalui bashrc / bash_profile.<Mengedit hampir satu dekade kemudian ...>
LocalCommand
toh bukan yang kamu inginkan. Itu dijalankan di mesin Anda . Kamu inginRemoteCommand
. Sesuatu seperti ini bekerja untuk saya:sumber
cd
perintah di~/.bashrc
server jauh sebagai gantinya.Ini bekerja:
Untuk membuat direktori jika tidak ada:
Jika Anda tidak menambahkan
bash
ke ujung jalan maka Anda keluar setelahcd
perintah dijalankan. Dan jika Anda tidak menambahkan--login
maka Anda~/.profile
tidak bersumber.sumber
~/.bash_profile
cd /path/to/your/destination
/path/to/your/destination
sumber
cd /path/to/your/destination
untuk~/.bashrc
bukan ke~/.bash_profile
. Hasilnya harus sama.~/.bash_profile
atau~/.bashrc
hanya akan memengaruhi pengguna saat ini.Solusi yang lebih kuat untuk case ketika Anda perlu ssh dan mengganti file .bashrc default. Ini berguna dalam kasus-kasus ketika lingkungan server jauh memiliki banyak dokumen dan digunakan oleh banyak pengguna.
Lebih detail:
.bashrc_tmp
file dalam/tmp
direktori di server jauh dengan kontencd /path/to/dir
bash
dengan file konfigurasi yang ditentukan pada langkah 1. Ini memungkinkan untuk beralih ke dir yang diinginkan dan menekan default.bashrc
.alias
, jadi pada ssh client command prompt dapat disebut sebagaissh_myserver
sumber
Sudahkah Anda mengaktifkan arahan ini di konfigurasi ssh Anda?
Default untuk itu adalah
no
, dalam hal iniLocalCommand
arahan Anda akan diabaikan.Atau, sudahkah Anda mencoba menambahkan perintah ke
.bashrc
file Anda ?sumber
Jadi saya telah mencari banyak situs web (stackoverflow, yang ini) tetapi tidak menemukan apa yang saya inginkan. Saya akhirnya membuat skrip shell saya sendiri. Saya menempelkannya di sini. Anda juga dapat menyalinnya direktori di $ PATH.
Jadi setelah ini. Saya lakukan:
Catatan: Anda mungkin harus keluar dan masuk lagi setelah mengubah variabel jalur
sumber
Di Anda
~/.ssh/config
:Di akhir Anda
~/.bashrc
:Saya mencoba melakukan ini menggunakan variabel passing, termasuk dengan variabel yang diekspor, tetapi perintah ini dijalankan di shell yang berbeda.
Ketika menguji apa yang Anda coba lakukan, saya tidak mendapatkan kesalahan ketika saya menggunakan jalur absolut yang tidak dikutip. Saya menambahkan
; pwd
di akhir perintah dan direktori yang benar ditampilkan, namun direktori saya berakhir adalah~
. Tidak adacd
perintah di file startup shell saya. Aku mencoba memasukkan berbedacd somedir; pwd
di~/.ssh/rc
(dengan yang lain masih di tempat). Theconfig
perintah dijalankan sebelum motd dikeluarkan danrc
perintah dikeluarkan setelah itu, tapi sebelum shell file startup yang bersumber. Jadi sekali lagi, ini terjadi di shell yang berbeda.Coba teknik passing-by-file dan beri tahu saya jika itu cocok untuk Anda.
sumber
Sudahkah Anda mencobanya tanpa tanda kutip di sekitarnya? Satu-satunya contoh yang saya lihat tidak memilikinya sehingga dengan itu bisa mencoba mengeksekusi cd \ web sebagai perintah.
sumber
Anda juga dapat mencoba ini, dengan opsi
-t
:sumber
Coba gunakan
RemoteCommand
, misalnyasumber