Ubah direktori default ketika saya SSH ke server


42

Saya bertanya-tanya apakah ada cara untuk mengubah direktori default yang saya masukkan setelah saya SSH ke server Ubuntu saya.

99% dari waktu ketika saya masuk ke server saya, itu adalah untuk mengakses file dalam direktori tertentu:

/var/www/websites

Apakah ada file konfigurasi yang dapat saya edit yang akan memastikan saya dimasukkan langsung ke direktori ini ketika saya login?

Jawaban:


62

Ada dua cara untuk mencapai ini:

  • Ubah direktori home Anda di server ke / var / www / websites (ini bukan ide yang bagus)
  • tambahkan cd /var/www/websiteske akhir .bashrc. Saya menggunakan yang ini di puppetmasters kami karena saya selalu ingin berada di / etc / puppet / environment / dkaarsemaker di sana alih-alih homedir saya :-)

Terima kasih. Saya mengedit file bash.bashrc yang terletak di direktori / etc. Bekerja yang menyenangkan :)
Bob Flemming

7
Ooh, saya tidak akan melakukan itu, karena ini mempengaruhi semua pengguna. Lebih baik mengedit /home/yourlogin/.bashrc
Dennis Kaarsemaker

6
Anda mungkin ingin meletakkan ini di Anda, .profilebukan .bashrc, tetapi itu tergantung pada kasus penggunaan Anda. .profiledieksekusi hanya untuk login interaktif (mis. shell) tetapi .bashrcjuga dieksekusi untuk login non-aktif (mis. scp, rsync, dll.). Juga, profil. Lebih cenderung dipanggil oleh shell yang tidak bash (misalnya zsh).
phord

.bashrc dieksekusi ketika Anda melakukan "exec bash" untuk menyegarkan bash Anda. Mengubah bashrc untuk penggunaan khusus (di sini ssh login) tidak berguna.
user3123159

14

Jika Anda menggunakan kunci untuk masuk SSH maka Anda dapat mengubah jalur dengan menambahkan command=sebelum kunci di server jauh~/.ssh/authorized_keys Anda . Contoh:

command="cd /var/www/websites ; /bin/bash -l" ssh-rsa AAA.....rest of the key

Tidak apa-apa untuk membuat dan menggunakan beberapa kunci untuk pengguna yang sama. Satu kunci di server mungkin berisi perintah yang lain mungkin tidak - dengan cara ini Anda memilih perilaku yang diharapkan pada waktu masuk. Anda cukup membungkusnya dengan lokal ~/.ssh/config :

Host websites-my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key1>  #on the server key with "command"
    User webmaster

Host my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key2>  #on the server key without command
    User webmaster

Inilah yang akan terjadi:

local$ ssh websites-my-host
webmaster@realhostname:/var/www/websites$ _

atau:

local$ ssh my-host
webmaster@realhostname:~$ _

3
Saya lebih suka pertanyaan ini di atas yang diterima. Hal ini memungkinkan banyak pengguna untuk menggunakan pengguna yang sama di server dan masih dapat menyesuaikan apa yang terjadi ketika Anda secara pribadi masuk. Jauh lebih fleksibel dan seakurat yang lainnya.
testuser

1
Anda harus benar-benar berhati-hati di sini karena menambahkan perintah ke ~ / .ssh / official_keys memengaruhi alat lain berdasarkan ssh seperti rsync, scp. Perintah-perintah ini hanya akan hang
warunapww

1
Anda dapat menggunakan $SSH_ORIGINAL_COMMANDalih-alih /bin/bash -lmendapatkan alat untuk bekerja (dalam kasus saya, hg). Atau $SHELLjika Anda tidak ingin hardcode menjadi bash. Tidak yakin bagaimana cara mendapatkan alat dan login manusia untuk keduanya berfungsi.
mpen

Hanya kata peringatan: Jika Anda telah menonaktifkan PasswordAuthentication (lihat askubuntu.com/questions/346857/… ) dan secara tidak sengaja salah ketik string perintah Anda, Anda dapat mengunci diri dari sistem.
karan.dodia

6

Openssh sshd secara default menerima variabel lingkungan ini dari klien:

AcceptEnv LANG LC_*

Anda dapat menggunakannya untuk mengirim nilai dari lingkungan lokal klien ke server seperti ini:

LC_CDPATH=/var/www/websites ssh -o SendEnv=LC_CDPATH user@server

Anda dapat menempatkan direktif SendEnv di ~ / .ssh / config sehingga Anda tidak harus memasukkannya pada baris perintah.

Jika Anda menempatkan yang berikut ini di profil ~ /. (Hanya untuk memengaruhi login interaktif, gunakan. Profil, untuk memengaruhi semua login, gunakan .bashrc):

if [ "$LC_CDPATH" -a -d "$LC_CDPATH" ]; then
  cd "$LC_CDPATH";
fi

Maka secara otomatis akan mengubah direktori ke yang ditentukan dalam variabel lingkungan ketika Anda login, jika ditentukan dan jika itu adalah direktori.


1
+1 untuk LC_*trik
Orient
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.