Câu trả lời này phát triển cả khi câu trả lời được chọn bằng cách thêm bảo mật.
Câu trả lời đó đã thảo luận về hình thức chung
<command that makes output> | \
ssh <user A>@<host A> <command that maps stdin to clipboard>
Nơi an ninh có thể thiếu là trong sshđiều khoản cho phép <user B>trên host B>để sshvào host Avà thực hiện bất kỳ lệnh.
Tất nhiên Bđể Atruy cập có thể đã được kiểm soát bởi một sshkhóa và thậm chí nó có thể có mật khẩu. Nhưng một lớp bảo mật khác có thể hạn chế phạm vi của các lệnh được phép Bcó thể thực thi trên A, ví dụ như vậy rm -rf /không thể được gọi. (Điều này đặc biệt quan trọng khi sshkhóa không có mật khẩu.)
May mắn thay, sshcó một tính năng tích hợp được gọi là hạn chế lệnh hoặc lệnh bắt buộc . Xem ssh.com , hoặc câu hỏi serverfault.com này .
Giải pháp dưới đây cho thấy giải pháp biểu mẫu chung cùng với ssh hạn chế lệnh được thi hành.
Giải pháp ví dụ với giới hạn lệnh được thêm vào
Giải pháp nâng cao bảo mật này tuân theo hình thức chung - cuộc gọi từ sshphiên trên host-Bchỉ đơn giản là:
cat <file> | ssh <user-A>@<host A> to_clipboard
Phần còn lại của chương trình này cho thấy thiết lập để làm việc đó.
Thiết lập hạn chế lệnh ssh
Giả sử tài khoản người dùng trên Blà user-Bvà B có khóa ssh id-clip, đã được tạo theo cách thông thường ( ssh-keygen).
Sau đó trong user-Athư mục ssh có một tập tin
/home/user-A/.ssh/authorized_keys
nhận ra khóa id-clipvà cho phép sshkết nối.
Thông thường nội dung của mỗi dòng authorized_keyschính xác là khóa công khai được ủy quyền, ví dụ: nội dung của id-clip.pub.
Tuy nhiên, để thực thi hạn chế lệnh , nội dung khóa chung được thêm vào (trên cùng một dòng) bởi lệnh sẽ được thực thi.
Trong trường hợp của chúng ta:
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>
Lệnh được chỉ định "/home/user-A/.ssh/allowed-commands.sh id-clip"và chỉ lệnh được chỉ định đó được thực thi bất cứ khi nào khóa id-clipđược sử dụng bắt đầu một sshkết nối đến host-A- bất kể lệnh nào được viết sshdòng lệnh .
Lệnh chỉ ra tệp tập lệnh allowed-commands.shvà nội dung của tệp tập lệnh đó là
#/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
Cuộc gọi ban đầu đến sshmáy Blà
... | ssh <user-A>@<host A> to_clipboard
Chuỗi to-clipboardđược truyền đến allowed-commands.shbởi biến môi trường SSH_ORIGINAL_COMMAND. Ngoài ra, chúng tôi đã chuyển tên của khóa id-clip, từ dòng authorized_keyschỉ được truy cập bởi id-clip.
Dòng
notify-send "ssh to-clipboard, from ${Id}"
chỉ là một hộp thông báo bật lên để cho bạn biết bảng ghi tạm đang được viết - đó có lẽ cũng là một tính năng bảo mật tốt. ( notify-sendhoạt động trên Ubuntu 18.04, có thể không phải là người khác).
Trong dòng
cat | xsel --display :0 -i -b
tham số --display :0này là cần thiết bởi vì quá trình không có màn hình X riêng với bảng tạm, do đó nó phải được cụ thể hóa rõ ràng. Giá trị này :0xảy ra để hoạt động trên Ubuntu 18.04 với máy chủ cửa sổ Wayland. Trên các thiết lập khác, nó có thể không hoạt động. Đối với một máy chủ X tiêu chuẩn , câu trả lời này có thể giúp ích.
host-A /etc/ssh/sshd_config thông số
Cuối cùng, một vài tham số trong /etc/ssh/sshd_configmáy chủ Anên được đặt để đảm bảo quyền kết nối và quyền chỉ sử dụng ssh-key mà không cần mật khẩu:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers user-A
Để làm cho sshdmáy chủ đọc lại cấu hình
sudo systemctl restart sshd.service
hoặc là
sudo service sshd.service restart
phần kết luận
Đó là một số nỗ lực để thiết lập nó, nhưng các chức năng khác ngoài việc to-clipboardcó thể được xây dựng song song cùng một khung.
:'<,'>w !ssh desktop pbcopy