ssh. Ini adalah alat yang hebat, tetapi saya selalu menemukan satu hal yang aneh tentangnya. Terlepas dari kenyataan bahwa koneksi ssh memungkinkan transfer file menggunakan scpdan sftp, kami tidak memiliki kemampuan untuk memindahkan file antara sistem lokal dan remote tanpa menjalankan program pada host lokal, atau tanpa menghubungkan ke mesin lokal dari remote.
Yang terakhir adalah masalah nyata, karena server sering kali terhubung saat berada di belakang firewall atau di belakang router NAT, yaitu tanpa alamat IP permanen. Akibatnya, server, bagaimanapun, tidak akan dapat terhubung ke sistem lokal yang sebelumnya diakses. Jika dalam sesi ssh Anda bisa mengambil file lokal atau jarak jauh dan mentransfernya ke tempat yang Anda butuhkan, akan sangat mudah.
Sebenarnya, saya tidak cukup mencapai tujuan ini, tetapi saya hampir mencapainya. Pada artikel ini saya akan memberi tahu Anda tentang skrip yang memungkinkan Anda memasang direktori jarak jauh di komputer lokal Anda. Di komputer lokal, Anda perlu menginstal
sshfs, tetapi di lokasi terpencil di mana Anda mungkin tidak dapat memasang program, Anda tidak perlu mengubah apa pun. Jika Anda meluangkan waktu untuk menyiapkan sistem, dan jika ada server ssh yang berfungsi di komputer klien, Anda juga dapat memasang direktori lokal pada sistem jarak jauh. Anda tidak perlu khawatir tentang memblokir alamat IP atau port. Faktanya, jika Anda dapat terhubung ke mesin jarak jauh, itu berarti Anda akan berhasil dalam apa yang ingin saya ceritakan.
Alhasil, jika semua ini digabungkan, ternyata saya sangat dekat dengan tujuan. Saya dapat bekerja dengan shell perintah di klien atau di server dan memiliki kemampuan untuk membaca dan menulis file dengan mudah di kedua sisi koneksi. Untuk melakukan ini, Anda hanya perlu mengkonfigurasi semuanya dengan benar.
Apakah ada batasan di sini?
Mungkin Anda memutuskan bahwa ada semacam tangkapan. Bagaimanapun, kita sebenarnya berbicara tentang menggunakan dua koneksi ssh. Satu digunakan untuk memasang sistem file, dan yang lainnya digunakan untuk masuk ke komputer. Dan inilah kenyataannya. Tetapi jika dikonfigurasi dengan benar
ssh, maka otentikasi hanya perlu dilakukan sekali, tanpa menghabiskan terlalu banyak waktu untuk mengatur dua koneksi.
Selain itu, pekerjaan ini sangat difasilitasi oleh naskah, yang akan saya bicarakan. Ini menyembunyikan detail dari pengguna, sehingga prosedur koneksi terlihat (hampir) seperti biasa, dan setelah itu semuanya berfungsi sebagaimana mestinya.
Beberapa kata tentang sshfs
Utilitas
sshfsmemungkinkan untuk bekerja dengan sistem file di ruang pengguna (sistem file di ruang pengguna, FUSE). Artinya, kita berbicara tentang fakta bahwa ada lapisan di ruang pengguna yang berada di atas sistem file dasar. Dalam hal ini, sistem file tersebut adalah server ssh yang mendukung sftp. Hal ini memungkinkan Anda untuk bekerja dengan file yang terletak di sistem jarak jauh, memperlakukannya seolah-olah file tersebut berada dalam sistem file nyata di komputer lokal. Jika Anda belum sshfsmencobanya, cobalah. Utilitas ini bekerja dengan sangat baik.
Misalkan Anda masuk ke komputer Anda
myserverdan menjalankan perintah berikut dari mesin lokal Anda:
sshfs myserver:/home/admin ~/mounts/myserver
Ini akan membuat direktori komputer jarak jauh
/home/admindapat diakses di sistem lokal di sepanjang jalur ~/mounts/myserver.
Saat menggunakan,
sshfsAnda dapat menggunakan berbagai opsi. Misalnya, Anda dapat mengatur untuk menghubungkan kembali setelah kehilangan koneksi. Untuk detailnya, sshfslihat bantuannya.
Karena ini
sshfsmenggunakan versi file yang dipasang dari jarak jauh, semua perubahan yang dibuat pada file disimpan di mesin jarak jauh. Dan setelah koneksi sshfs ditutup, tidak ada yang tersisa di komputer lokal. Kami akan memperbaikinya sekarang.
Persiapan awal
Sebelum saya melanjutkan ke uraian skrip, yang disebutkan di atas, saya ingin berbicara tentang beberapa pengaturan klien yang, jika Anda mau, dapat memodifikasi sendiri. Jadi, di sini saya membuat direktori
~/remote, dan di dalamnya saya membuat subdirektori untuk setiap komputer jarak jauh. Misalnya - dapat berupa direktori ~/remote/fileserverdan ~/remote/lab.
Naskahnya dipanggil
sshmount. Ini mengambil argumen yang sama seperti ssh. Untuk menyederhanakan pekerjaan dengan skrip, informasi tentang host jarak jauh harus disimpan dalam sebuah file ~/.ssh/config, yang memungkinkan penggunaan nama host yang sederhana dan pendek. Misalnya, informasi komputer labmungkin terlihat seperti ini:
Host lab
Hostname lab.wd5gnr-dyn.net
Port 444
User alw
ForwardX11 yes
ForwardX11Trusted yes
TCPKeepAlive yes
Compression yes
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
Ini tidak terlalu penting, tetapi dengan pendekatan ini Anda memiliki direktori yang bagus untuk Anda gunakan
~/remote/lab, bukan konstruksi tampilan yang kompleks ~/remote/alw@lab.wd5gnr-dyn.net:444. Tidak ada yang misterius tentang semua parameter ini. Satu-satunya hal yang saya ingin menarik perhatian Anda adalah ControlMasterdan ControlPathmemungkinkan Anda untuk mengatur agar berjalan lebih cepat dengan senyawa yang, dalam hal ini, sangat penting.
Selain itu, Anda dapat mengatur koneksi otomatis ke sistem jarak jauh menggunakan kunci ssh pribadi. Inilah beberapa hal tentang itu.
Naskah
Skrip kami dapat digunakan dengan dua cara. Jadi, jika dipanggil melalui tautan ke
sshunmount, itu akan melepas sistem file yang terkait dengan host jarak jauh yang ditentukan. Jika dipanggil berbeda (biasanya bagaimana sshmount), maka ia melakukan tiga tindakan berikut:
- Ia memeriksa apakah direktori berisi
~/remotesubdirektori dengan nama yang sama dengan nama host (misalnya -lab). Jika tidak ada direktori seperti itu, ini akan menampilkan pesan kesalahan dan terus bekerja. - Jika direktori seperti itu ada, skrip melihat daftar sistem file yang dipasang jika sistem file yang diperlukan sudah terpasang. Jika demikian, dia terus bekerja.
- Jika direktori tidak dipasang, itu memanggil
sshfsdan melanjutkan.
Skrip ini dapat ditemukan di GitHub . Dan berikut adalah kodenya, dari mana beberapa komentar telah dihapus:
#!/bin/bash
if [ "$1" == "" ]
then
echo Usage: sshmount host [ssh_options] - Mount remote home folder on ~/remote/host and log in
echo or: sshunmount host - Remove mount from ~/remote/host
exit 1
fi
# sshunmount...
if [ $(basename "$0") == sshunmount ]
then
echo Unmounting... 1>&2
fusermount -u "$HOME/remote/$1"
exit $?
fi
# ...
if [ -d "$HOME/remote/$1" ] # ?
then
if mount | grep "$HOME/remote/$1 " # ?
then
echo Already mounted 1>&2
else
sshfs -o reconnect $1: $HOME/remote/$1 # mount
fi
else
echo No remote directory ~/remote/$1 exists 1>&2
fi
ssh $@ #
Skrip ini memberi saya setengah dari apa yang saya butuhkan. Yaitu, ini memungkinkan Anda untuk bekerja dengan mudah dengan file jarak jauh di komputer lokal tempat saya terhubung. Tetapi membuatnya sehingga dari komputer jarak jauh dimungkinkan untuk bekerja dengan file yang terletak di mesin lokal sedikit lebih sulit.
Memecahkan masalah terbalik
Jika Anda ingin bereksperimen dengan memasang folder di mesin lokal Anda di server, Anda harus menjalankan server ssh di mesin lokal. Tentu saja, jika komputer lokal Anda terlihat dan dapat diakses oleh server, maka itu sederhana: jalankan saja di komputer jarak jauh
sshfsdan pasang folder di dalamnya dari komputer lokal. Namun dalam banyak kasus, kami tidak memiliki akses ke sistem lokal, yang mungkin terletak di belakang firewall atau router. Ini terutama benar jika peran sistem lokal dimainkan oleh laptop yang dapat terhubung ke jaringan dari tempat yang berbeda.
Tetapi tugas kita, terlepas dari semua kesulitan ini, masih bisa diselesaikan. Ada dua bagian untuk solusinya.
Pertama - perlu, saat menelepon
sshmount, tentukan argumen tambahan (file dapat diedit jika Anda perlu terus-menerus menjalankan perintah serupa):
sshmount MyServer -R 5555:localhost:22
Kedua, setelah terhubung ke host, Anda perlu menjalankan perintah berikut:
sshfs -p 5555 localhost:/home/me ~/local
Berkat opsi tersebut
-R, soket pada port dibuat pada mesin jarak jauh 5555(yang, tentu saja, harus gratis) dan koneksi dengan port 22mesin lokal dilakukan . Dengan asumsi server ssh berjalan di port 22, ini akan memungkinkan server untuk terhubung ke mesin lokal melalui koneksi yang sama. Itu tidak perlu mengetahui alamat IP kita atau memiliki port terbuka.
Perintah
sshfs, yang dapat dijalankan saat startup sistem, menghubungkan direktori lokal /home/meke direktori di ~/localserver jauh. Selain itu, jika Anda masuk secara lokal, Anda dapat melihat variabel lingkungan yang dimulai dengan SSH_dan mempelajari lebih lanjut tentang koneksi SSH. Misalnya, ini adalah variabel $SSH_CLIENTdan $SSH_TTY.
Tentu saja, agar perintah di atas bekerja untuk Anda, Anda perlu mengubah nama host dan direktori, serta alamat port yang digunakan pada sistem Anda. Tetapi setelah semuanya dikonfigurasi, semua file yang Anda butuhkan akan tersedia di mesin lokal dan jarak jauh. Omong-omong, saya tidak mencoba mengatur pemasangan direktori yang melingkar. Jika Anda mencoba melakukan ini, sesuatu yang sangat aneh bisa terjadi.
Hasil
Saya kira Anda perlu berhati-hati saat memasang folder jarak jauh pada mesin lokal dan folder lokal pada mesin jarak jauh pada saat yang bersamaan. Misalnya, utilitas yang memindai seluruh sistem file dapat menjadi bingung dalam konfigurasi seperti itu. Selain itu, saya masih mencari jawaban atas pertanyaan tentang cara memutuskan dengan benar dari sistem file server saat keluar dari sesi terakhir.
Tetapi bahkan sekarang semua ini memberi kita alat yang bagus untuk mengatur pekerjaan yang nyaman dan andal dengan file perangkat lunak
ssh. Perlu dicatat bahwa opsi lain untuk menyelesaikan masalah bekerja dengan file pada sistem jarak jauh dapat menyinkronkan folder dan menggunakannya untuk mentransfer file antar komputer.
Apa yang Anda gunakan untuk bekerja dengan file di sistem Linux jarak jauh?
