Этот ответ развивается как на выбранный ответ , добавляя больше безопасности.
Этот ответ обсуждался в общем виде
<command that makes output> | \
ssh <user A>@<host A> <command that maps stdin to clipboard>
Там , где безопасность может отсутствовать в то ssh
разрешение позволяет <user B>
на host B>
к ssh
в host A
и выполнить любую команду.
Конечно , B
для A
доступа может быть уже закрытого типа с помощью ssh
ключа, и он может даже иметь пароль. Но другой уровень безопасности может ограничивать область допустимых команд, которые B
могут выполняться A
, например, которые rm -rf /
не могут быть вызваны. (Это особенно важно, когда ssh
ключ не имеет пароля.)
К счастью, ssh
имеет встроенную функцию, называемую ограничением команд или принудительной командой . Смотрите ssh.com , или этот вопрос serverfault.com .
Приведенное ниже решение показывает решение в общей форме вместе с принудительным ssh
ограничением команд .
Пример решения с добавленным ограничением команд
Это улучшенное решение безопасности следует общей форме - вызов из ssh
сеанса host-B
просто:
cat <file> | ssh <user-A>@<host A> to_clipboard
Остальная часть этого показывает установку, чтобы заставить это работать.
Настройка ограничения команды ssh
Предположим, что учетная запись пользователя B
is user-B
, а B имеет ключ ssh id-clip
, который был создан обычным способом ( ssh-keygen
).
Тогда в user-A
'ssh каталоге есть файл
/home/user-A/.ssh/authorized_keys
который распознает ключ id-clip
и позволяет ssh
соединение.
Обычно содержимым каждой строки authorized_keys
является именно тот открытый ключ, который авторизуется, например, содержимое id-clip.pub
.
Однако для принудительного ограничения команды необходимо, чтобы содержимое открытого ключа предшествовало (в той же строке) команде, которая должна быть выполнена.
В нашем случае:
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>
Назначенная команда "/home/user-A/.ssh/allowed-commands.sh id-clip"
и только эта назначенная команда выполняется всякий раз, когда id-clip
используется ключ, инициироватьssh
соединение сhost-A
- независимо от того, какая команда записана в ssh
командной строке .
Команда указывает файл скрипта allowed-commands.sh
, и содержимое этого файла сценария
#/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
Оригинальный звонок ssh
на машину B
был
... | ssh <user-A>@<host A> to_clipboard
Строка to-clipboard
передается allowed-commands.sh
переменной окруженияSSH_ORIGINAL_COMMAND
. Кроме того, мы передали имя ключа id-clip
, из строки, в authorized_keys
которой доступен только id-clip
.
Линия
notify-send "ssh to-clipboard, from ${Id}"
это просто всплывающее окно с сообщением о том, что буфер обмена пишется - это, вероятно, также хорошая функция безопасности. ( notify-send
работает на Ubuntu 18.04, возможно, не на других).
В линии
cat | xsel --display :0 -i -b
параметр --display :0
необходим, потому что у процесса нет собственного X-дисплея с буфером обмена, поэтому он должен быть явно указан. Это значение :0
работает в Ubuntu 18.04 с сервером окон Wayland. На других установках это может не сработать. Для стандартного X-сервера этот ответ может помочь.
host-A
/etc/ssh/sshd_config
параметры
Наконец, несколько параметров /etc/ssh/sshd_config
на хосте, A
которые должны быть установлены, чтобы обеспечить разрешение на подключение и разрешение использовать ssh
-key только без пароля:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers user-A
Чтобы sshd
сервер перечитал конфиг
sudo systemctl restart sshd.service
или
sudo service sshd.service restart
вывод
Это to-clipboard
требует определенных усилий, но другие функции помимо этого могут быть построены параллельно в той же самой структуре.
:'<,'>w !ssh desktop pbcopy