この回答は、セキュリティを強化することにより、選択した回答の両方に基づいて開発されています。
その答えは一般的な形を議論しました
<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がid-clip
通常の方法で作成されたsshキーを持っているとします(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で動作します。他のセットアップでは機能しない場合があります。標準Xサーバーの場合、この答えが役立つ場合があります。
host-A
/etc/ssh/sshd_config
パラメーター
最後に、接続の許可、およびパスワードなしでのみ-key を使用する許可を確実にするために設定する必要がある/etc/ssh/sshd_config
ホストのいくつかのパラメーター:A
ssh
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