Bagaimana cara SSH ke direktori tertentu?

39

Saya sering masuk ke server, lalu masuk ke direktori tertentu. Apakah mungkin untuk menyederhanakan dua perintah ini menjadi satu?

ssh bob@foo  
cd /home/guest

Saya ingin menghindari mengubah apa pun di 'foo' jika memungkinkan, karena saya harus menghapusnya dengan administrator server. Saya menggunakan bash, tetapi saya terbuka untuk jawaban di shell lain.

spuder
sumber

Jawaban:

22

Cukup masukkan baris terakhir file ~ bob / .bash_profile Anda di foo:

cd /home/guest >& /dev/null

Sekarang setiap kali Anda masuk (baik dengan SSH atau lainnya), perintah cd akan berjalan. Tidak perlu bercanda dengan ssh.

Saya tahu Anda menulis bahwa Anda "ingin menghindari mengubah apa pun di 'foo' jika memungkinkan," tetapi jika akun bob @ foo adalah milik Anda, mengubah .bash_profile Anda sendiri harus dapat diterima, bukan?

DanB
sumber
2
Mengapa ya, saya pikir ini akan berhasil. Saya tidak perlu mendapatkan izin dari IT untuk melakukan perubahan itu. Bisakah Anda menjelaskan mengapa Anda membutuhkan> & / dev / null?
Spuder
6
Saya pikir itu seharusnya &> /dev/null. Ini mencegah pesan kesalahan apa pun yang dapat ditampilkan kalau-kalau cd gagal mengubah direktori ke / home / direktori. Jika Anda ingin melihat pesan-pesan itu, Anda bisa mengecualikannya.
konsolebox
5
>&dan &>sama di Bash. Gaya yang terakhir lebih disukai.
Selain itu, pengalihan ke / dev / null mencegah nama direktori agar tidak digaungkan di layar, yang mungkin dilakukan "cd".
DanB
41

Ini bekerja dengan OpenSSH:

ssh -t bob@foo 'cd /home/guest && exec bash -l'

Argumen terakhir berjalan di shell login Anda. The -tbendera diteruskan ke sshpasukan sshuntuk mengalokasikan pseudo-terminal, yang diperlukan untuk shell interaktif. The -lbendera diteruskan ke bashmulai menampar sebagai shell login .

Masyarakat
sumber
3
Saya ingin tahu, apakah menambahkan opsi-l ke bash juga membantu? ... && exec bash -l
konsolebox
1
@konsolebox: Itu ide yang bagus. Saya telah menambahkan itu ke jawaban saya.
17

Anda juga dapat melakukannya dengan cara ini, mirip dengan solusi @ EvanTeitelman:

$ ssh -t bob@foo "cd /tmp ; bash"

Atau jika Anda tidak tahu cangkang di ujung yang lain:

$ ssh -t bob@foo "cd /tmp && exec \$SHELL"

Atau seperti ini:

$ ssh -t bob@foo 'cd /tmp && exec $SHELL'
slm
sumber