Saya sering harus masuk ke salah satu dari beberapa server dan pergi ke salah satu dari beberapa direktori pada mesin tersebut. Saat ini saya melakukan hal semacam ini:
localhost ~] $ ssh somehost Selamat datang di hosting! somehost ~] $ cd / some / direktori / suatu tempat / bernama / Foo somehost Foo] $
Saya memiliki skrip yang dapat menentukan host mana dan direktori mana yang perlu saya masuki tetapi saya tidak dapat menemukan cara untuk melakukan ini:
localhost ~] $ go_to_dir Foo Selamat datang di hosting! somehost Foo] $
Adakah yang mudah, pintar atau ada cara untuk melakukan ini?
ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted && exec \$SHELL"
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
ssh server -t "cd /my/remote/directory; bash --login"
Anda bisa menambahkan
ke
.bashrc
file Anda (atau.profile
apa pun namanya) di host lain. Dengan begitu, tidak peduli apa yang Anda lakukan atau dari mana Andassh
berasal, setiap kali Anda masuk ke server itu, itu akancd
ke direktori yang tepat untuk Anda, dan yang harus Anda lakukan adalah menggunakanssh
seperti biasa.Tentu saja, solusi rogeriopvl juga berfungsi, tetapi ini sedikit lebih bertele-tele, dan Anda harus ingat untuk melakukannya setiap waktu (kecuali jika Anda membuat alias) sehingga sepertinya sedikit kurang "menyenangkan".
sumber
Saya telah membuat alat untuk SSH dan CD ke server secara berurutan - aptly bernama sshcd . Untuk contoh yang Anda berikan, Anda cukup menggunakan:
Beri tahu saya jika Anda memiliki pertanyaan atau masalah!
sumber
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:
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:Fungsi Bash
Anda dapat menyederhanakan perintah dengan membungkusnya dalam fungsi bash. Katakanlah Anda hanya ingin mengetik ini:
Anda dapat membuat ini berfungsi dengan menambahkan ini ke
~/.bashrc
: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: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
danRemoteCommand
opsi dalam file konfigurasi ssh Anda.Misalnya, saya ingin mengetik hanya perintah ini:
tetapi ingin selalu berperilaku seperti perintah ini:
Jadi saya menambahkan ini ke
~/.ssh/config
file saya :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
sumber
Berdasarkan tambahan pada jawaban @ rogeriopvl, saya menyarankan yang berikut:
Perintah chaining oleh
&&
akan membuat perintah berikutnya berjalan hanya ketika yang sebelumnya berhasil (bukan menggunakan;
, yang mengeksekusi perintah secara berurutan). Ini sangat berguna ketika perlu kecd
direktori melakukan perintah.Bayangkan melakukan hal berikut:
Direktori
teminal
tidak ada, yang menyebabkan Anda tetap berada di direktori home dan menghapus semua file di sana dengan perintah berikut.Jika Anda menggunakan
&&
:Perintah akan gagal setelah tidak menemukan direktori.
sumber
Dalam kasus saya yang sangat spesifik, saya hanya ingin menjalankan perintah di host jarak jauh, di dalam direktori tertentu dari mesin slave Jenkins:
Tapi mesin saya tidak bisa melakukan ssh (saya tidak bisa mengalokasikan pseudo-tty kurasa) dan membuat saya memberikan kesalahan berikut:
Saya bisa menyelesaikan masalah ini lewat "cd to dir + my command" sebagai parameter dari perintah ssh (untuk tidak harus mengalokasikan terminal-Pseudo) dan dengan meneruskan opsi -T untuk secara eksplisit memberitahu perintah ssh yang saya tidak lakukan membutuhkan alokasi pseudo-terminal.
sumber
Saya menggunakan variabel lingkungan CDPATH
sumber
melangkah lebih jauh dengan
-t
gagasan itu. Saya menyimpan satu set script yang memanggil yang di bawah ini untuk pergi ke tempat-tempat tertentu di host saya yang sering dikunjungi. Saya menyimpan semuanya~/bin
dan menyimpan direktori itu di jalur saya.sumber
Cara lain untuk langsung setelah masuk adalah membuat "Alias". Ketika Anda masuk ke sistem Anda cukup ketik alias itu dan Anda akan berada di direktori itu.
Contoh: Alias = myfolder '/ var / www / Folder'
Setelah Anda masuk ke sistem Anda ketik alias itu (ini bekerja dari bagian mana pun dari sistem)
perintah ini jika tidak di bashrc akan bekerja untuk sesi saat ini. Jadi, Anda juga dapat menambahkan alias ini ke bashrc untuk menggunakannya di masa mendatang
$ myfolder => membawa Anda ke folder itu
sumber
SSH sendiri menyediakan sarana komunikasi, tidak tahu apa-apa tentang direktori. Karena Anda dapat menentukan perintah jarak jauh mana yang harus dijalankan (ini - secara default - shell Anda), saya akan mulai dari sana.
sumber
cukup modifikasi rumah Anda dengan perintah:
usermod -d /newhome username
sumber