通过增加安全性,此答案可在所选答案的基础上发展。
该答案讨论了一般形式
<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
是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
恰好在具有Wayland窗口服务器的Ubuntu 18.04上工作。在其他设置上,它可能不起作用。对于标准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