Jawaban ini berkembang pada jawaban yang dipilih dengan menambahkan lebih banyak keamanan.
Jawaban itu membahas bentuk umum
<command that makes output> | \
ssh <user A>@<host A> <command that maps stdin to clipboard>
Di mana keamanan mungkin kurang dalam ssh
hak akses yang memungkinkan <user B>
pada host B>
ke ssh
dalam host A
dan menjalankan setiap perintah.
Tentu saja B
untuk A
mengakses mungkin sudah dilindungi oleh ssh
kunci, dan bahkan mungkin memiliki kata sandi. Tetapi lapisan keamanan lain dapat membatasi ruang lingkup perintah yang diizinkan yang B
dapat dijalankan A
, misalnya sehingga rm -rf /
tidak dapat dipanggil. (Ini sangat penting ketika ssh
kunci tidak memiliki kata sandi.)
Untungnya, ssh
memiliki fitur bawaan yang disebut pembatasan perintah atau perintah paksa . Lihat ssh.com , atau pertanyaan serverfault.com ini .
Solusi di bawah ini menunjukkan solusi bentuk umum bersama dengan ssh
pembatasan perintah yang diberlakukan.
Contoh Solusi dengan batasan perintah ditambahkan
Solusi keamanan yang ditingkatkan ini mengikuti formulir umum - panggilan dari ssh
sesi aktif host-B
hanya:
cat <file> | ssh <user-A>@<host A> to_clipboard
Sisanya menunjukkan pengaturan untuk membuatnya bekerja.
Pengaturan pembatasan perintah ssh
Misalkan akun pengguna di B
yaitu user-B
, dan B memiliki kunci ssh id-clip
, yang telah dibuat dengan cara yang biasa ( ssh-keygen
).
Lalu di user-A
direktori ssh ada file
/home/user-A/.ssh/authorized_keys
yang mengenali kunci id-clip
dan memungkinkan ssh
koneksi.
Biasanya isi dari setiap baris authorized_keys
persis kunci publik yang diotorisasi, misalnya isi id-clip.pub
.
Namun, untuk menegakkan pembatasan perintah bahwa konten kunci publik diawali (pada baris yang sama) oleh perintah yang akan dieksekusi.
Dalam kasus kami:
command="/home/user-A/.ssh/allowed-commands.sh id-clip",no-agent-forwarding,no-port-forwarding,no-user-rc,no-x11-forwarding,no-pty <content of file id-clip.pub>
Perintah yang ditunjuk "/home/user-A/.ssh/allowed-commands.sh id-clip"
, dan hanya perintah yang ditunjuk, dieksekusi setiap kali kunci id-clip
digunakan memulai ssh
koneksi ke host-A
- tidak peduli apa perintah yang dituliskan ssh
baris perintah .
Perintah menunjukkan file skrip allowed-commands.sh
, dan konten file skrip itu
#/bin/bash
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.
Id=${1}
case "$SSH_ORIGINAL_COMMAND" in
"to-clipboard")
notify-send "ssh to-clipboard, from ${Id}"
cat | xsel --display :0 -i -b
;;
*)
echo "Access denied"
exit 1
;;
esac
Panggilan asli ke ssh
mesin B
adalah
... | ssh <user-A>@<host A> to_clipboard
String to-clipboard
dilewatkan allowed-commands.sh
oleh variabel lingkungan SSH_ORIGINAL_COMMAND
. Selain itu, kami telah memasukkan nama kunci id-clip
, dari baris authorized_keys
yang hanya dapat diakses oleh id-clip
.
Garis
notify-send "ssh to-clipboard, from ${Id}"
hanya kotak pesan popup untuk memberi tahu Anda bahwa clipboard sedang ditulis - itu mungkin fitur keamanan yang baik juga. ( notify-send
berfungsi di Ubuntu 18.04, mungkin bukan yang lain).
Dalam barisan
cat | xsel --display :0 -i -b
parameter --display :0
ini diperlukan karena prosesnya tidak memiliki tampilan X sendiri dengan clipboard, sehingga harus dikhususkan secara eksplisit. Nilai ini :0
berfungsi pada Ubuntu 18.04 dengan server Windows Wayland. Pada pengaturan lain mungkin tidak berfungsi. Untuk server X standar, jawaban ini mungkin membantu.
host-A
/etc/ssh/sshd_config
parameter
Akhirnya beberapa parameter di /etc/ssh/sshd_config
host A
yang harus diatur untuk memastikan izin untuk terhubung, dan izin untuk menggunakan ssh
-kunci saja tanpa kata sandi:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers user-A
Untuk membuat sshd
server membaca ulang konfigurasi
sudo systemctl restart sshd.service
atau
sudo service sshd.service restart
kesimpulan
Ini beberapa upaya untuk mengaturnya, tetapi fungsi-fungsi lain selain to-clipboard
dapat dibangun secara paralel dengan kerangka kerja yang sama.
:'<,'>w !ssh desktop pbcopy