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>
để ssh
vào host A
và thực hiện bất kỳ lệnh.
Tất nhiên B
để A
truy cập có thể đã được kiểm soát bởi một ssh
khó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 B
có 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 ssh
khóa không có mật khẩu.)
May mắn thay, ssh
có 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ừ ssh
phiên trên host-B
chỉ đơ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 B
là user-B
và B có khóa ssh id-clip
, đã được tạo theo cách thông thường ( ssh-keygen
).
Sau đó trong user-A
thư mục ssh có một tập tin
/home/user-A/.ssh/authorized_keys
nhận ra khóa id-clip
và cho phép ssh
kết nối.
Thông thường nội dung của mỗi dòng authorized_keys
chí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 ssh
kết nối đến host-A
- bất kể lệnh nào được viết ssh
dòng lệnh .
Lệnh chỉ ra tệp tập lệnh allowed-commands.sh
và 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 ssh
máy B
là
... | ssh <user-A>@<host A> to_clipboard
Chuỗi to-clipboard
được truyền đến allowed-commands.sh
bở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_keys
chỉ đượ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-send
hoạ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 :0
nà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 :0
xả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_config
máy chủ A
nê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 sshd
má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-clipboard
có thể được xây dựng song song cùng một khung.
:'<,'>w !ssh desktop pbcopy