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?

Bob Flemming
sumber

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 :-)
Dennis Kaarsemaker
sumber
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:~$ _
gertas
sumber
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.

Victor Jerlin
sumber
1
+1 untuk LC_*trik
Orient