GNU/Linux >> Belajar Linux >  >> Linux

Izinkan SCP tetapi bukan login yang sebenarnya menggunakan SSH

Solusi 1:

rssh shell (http://pizzashack.org/rssh/) dirancang tepat untuk tujuan ini.

Karena RHEL/CentOS 5.2 tidak menyertakan paket untuk rssh, Anda dapat melihat di sini untuk mendapatkan RPM:http://dag.wieers.com/rpm/packages/rssh/

Untuk menggunakannya, atur saja sebagai shell untuk pengguna baru seperti ini:

useradd -m -d /home/scpuser1 -s /usr/bin/rssh scpuser1
passwd scpuser1

..atau ubah shell untuk yang sudah ada seperti ini:

chsh -s /usr/bin/rssh scpuser1

..dan edit /etc/rssh.conf untuk mengonfigurasi rssh shell - terutama batalkan komentar allowscp baris untuk mengaktifkan akses SCP untuk semua pengguna rssh.

(Anda mungkin juga ingin menggunakan chroot agar pengguna tetap berada di rumah mereka, tetapi itu cerita lain.)

Solusi 2:

Saya sangat terlambat untuk ini, tetapi Anda dapat menggunakan kunci ssh dan menentukan perintah persis yang diizinkan dalam file ~/.ssh/authorized_keys mereka, mis.

no-port-forwarding,no-pty,command="scp source target" ssh-dss ...

Anda mungkin perlu menggunakan ps pada target untuk menyetel setelan perintah yang benar.

PS:Jika Anda menjalankan perintah uji scp dengan "-v", Anda dapat melihat sesuatu seperti ini

debug1: Sending command: scp -v -t myfile.txt

Anda akan mencatat bahwa "-t" adalah opsi scp tidak berdokumen, yang digunakan oleh program di ujung. Ini memberi Anda gambaran tentang apa yang perlu Anda masukkan ke dalam authorized_keys.

EDIT: Anda dapat menemukan informasi selengkapnya (dengan beberapa tautan) dalam pertanyaan StackOverflow ini.

Ini adalah contoh yang berfungsi untuk ini, untuk pengguna bernama backup_user di sisi server.

~backup_user/.ssh/authorized_keys konten di sisi server (dengan beberapa batasan keamanan lainnya):

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...

Buat tautan di ~backup_user/ yang menautkan ke direktori tempat konten dapat diakses.

$ ln -s /path/to/directory/with/accessible/content ~backup_user/CONTENT

Sekarang, dari sisi klien, perintah berikut seharusnya berfungsi :

scp -v  -r  -P 2222 -i .ssh/id_rsa_key_file path/to/data [email protected]:~/CONTENT

Apa yang dilakukan perintah ini:

  • Menampilkan informasi verbose (opsional :Anda dapat menghapus -v dari file command dan authorized_keys)
  • Ini secara rekursif menyalin konten dari jalur/ke/data. (opsional :Anda dapat menghapus -r dari file command dan authorized_keys jika Anda tidak ingin membuat salinan rekursif)
  • Menggunakan port 2222 untuk terhubung ke server (opsional :Anda dapat menghapus -P 2222 dari perintah)
  • Ia menggunakan dan file identitas untuk mengotomatiskan koneksi (opsional :Anda dapat menghapus -i .ssh/id_rsa_key_file
  • Isi dari path/to/data akan disalin ke /path/to/directory/with/accessible/content/

Untuk membuat salinan file (atau beberapa) dari server ke klien, Anda harus membuat skrip shell yang menangani ini seperti yang dijelaskan di sini

Solusi 3:

Saya agak terlambat ke pesta, namun saya sarankan Anda melihat ForceCommand direktif OpenSSH.

Subsystem sftp internal-sftp

Match group sftponly
         ForceCommand internal-sftp

Memang, ini adalah SFTP dan bukan SCP, tetapi mencapai tujuan yang sama, lebih aman dibandingkan dengan shell yang dibatasi. Selain itu, Anda dapat melakukan chroot pengguna jika Anda mau.

Solusi 4:

Saya menggunakan MySecureShell untuk melakukan ini. Anda juga dapat mengonfigurasi batasan lain.

https://github.com/mysecureshell/mysecureshell

Membatasi koneksi ke SFTP/SCP saja. Tidak ada akses shell.

Solusi 5:

Saya akan merekomendasikan menggunakan scponly.

Ini adalah shell terbatas yang memungkinkan pengguna untuk melakukan apa yang terdengar seperti, file SCP ke server, tetapi tidak benar-benar masuk. Unduhan informasi dan kode sumber untuk perangkat lunak tersedia di sini dan paket RPM yang telah dikompilasi tersedia melalui Repositori EPEL YUM.

Setelah diinstal, Anda perlu mengonfigurasi setiap akun pengguna, yang ingin Anda batasi aksesnya, untuk menggunakan shell terbatas yang baru diinstal. Anda dapat melakukannya secara manual melalui /etc/passwd atau menggunakan perintah berikut:usermod -s /usr/bin/scponly USERNAME


Linux
  1. Menggunakan Tombol Vi Untuk Mengedit Perintah Shell Di Unix?

  2. Menjalankan Perintah Jarak Jauh Pada Koneksi Ssh, Sebelum Masuk?

  3. Perintah Tidur Menggunakan Perintah Layar Tidak Ditampilkan Di Ps?

  1. 10 Contoh Praktis Menggunakan Perintah scp

  2. Bagaimana cara mengembalikan database MySQL menggunakan perintah di SSH?

  3. Batasi login SSH ke IP atau host tertentu

  1. Mengubah shell default di Linux

  2. Hapus file dari host jarak jauh menggunakan SSH

  3. `ssh <host>` adalah shell login, tetapi `ssh <host> <command>` bukan?