Pendekatan pilihan saya adalah menggunakan file konfigurasi SSH (dijelaskan di bawah), tetapi ada beberapa solusi yang mungkin tergantung pada penggunaan Anda.
Argumen Baris Perintah
Saya pikir jawaban terbaik untuk pendekatan ini adalah jawaban christianbundy untuk jawaban yang diterima:
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
Menggunakan tanda kutip ganda akan memungkinkan Anda untuk menggunakan variabel dari mesin lokal Anda, kecuali jika mereka lolos (seperti di $SHELL
sini). Atau, Anda dapat menggunakan tanda kutip tunggal, dan semua variabel yang Anda gunakan akan menjadi yang dari mesin target:
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
Fungsi Bash
Anda dapat menyederhanakan perintah dengan membungkusnya dalam fungsi bash. Katakanlah Anda hanya ingin mengetik ini:
sshcd example.com /foo/bar
Anda dapat membuat ini berfungsi dengan menambahkan ini ke ~/.bashrc
:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
Jika Anda menggunakan variabel yang ada pada mesin jarak jauh untuk direktori, pastikan untuk menghindarinya atau memasukkannya dalam tanda kutip tunggal. Sebagai contoh, ini akan cd ke direktori yang disimpan dalam JBOSS_HOME
variabel pada mesin remote:
sshcd example.com \$JBOSS_HOME
File Konfigurasi SSH
Jika Anda ingin melihat perilaku ini sepanjang waktu untuk host tertentu (atau apa saja) dengan perintah ssh normal tanpa harus menggunakan argumen baris perintah tambahan, Anda dapat mengatur RequestTTY
dan RemoteCommand
opsi dalam file konfigurasi ssh Anda.
Misalnya, saya ingin mengetik hanya perintah ini:
ssh qaapps18
tetapi ingin selalu berperilaku seperti perintah ini:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
Jadi saya menambahkan ini ke ~/.ssh/config
file saya :
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
Sekarang aturan ini berlaku untuk semua host dengan "aplikasi" di nama hostnya.
Untuk informasi lebih lanjut, lihat http://man7.org/linux/man-pages/man5/ssh_config.5.html