Ta odpowiedź rozwija obie na wybraną odpowiedź , dodając więcej bezpieczeństwa.
Ta odpowiedź dotyczyła ogólnej formy
<command that makes output> | \
ssh <user A>@<host A> <command that maps stdin to clipboard>
Gdzie zabezpieczenie może być brak jest w sshuprawnienia pozwalające <user B>na host B>na sshna host Ai wykonać dowolną komendę.
Oczywiście Bdo Adostępu mogą być już ogrodzony przez sshklucz, a nawet może mieć hasło. Ale inna warstwa zabezpieczeń może ograniczyć zakres dozwolonych poleceń, które Bmogą być wykonywane A, np. Tak, że rm -rf /nie można ich wywołać. (Jest to szczególnie ważne, gdy sshklucz nie ma hasła).
Na szczęście sshma wbudowaną funkcję o nazwie ograniczenie poleceń lub polecenie wymuszone . Zobacz ssh.com lub to pytanie serverfault.com .
Poniższe rozwiązanie przedstawia ogólne rozwiązanie formularza wraz z ssh ograniczeniami poleceń wymuszonym .
Przykład Rozwiązanie z ograniczeniami poleceń dodanymi
To ulepszone rozwiązanie pod względem bezpieczeństwa ma ogólną formę - połączenie z sshsesji host-Bto po prostu:
cat <file> | ssh <user-A>@<host A> to_clipboard
Reszta tego pokazuje konfigurację, aby to zadziałało.
Konfiguracja ograniczenia polecenia ssh
Załóżmy, że konto użytkownika na Bto user-B, a B ma klucz ssh id-clip, który został utworzony w zwykły sposób ( ssh-keygen).
Następnie w user-Akatalogu ssh znajduje się plik
/home/user-A/.ssh/authorized_keys
który rozpoznaje klucz id-clipi umożliwia sshpołączenie.
Zwykle zawartość każdego wiersza authorized_keysjest dokładnie autoryzowanym kluczem publicznym, np. Zawartość id-clip.pub.
Jednak aby wymusić ograniczenie poleceń , zawartość klucza publicznego jest poprzedzona (w tym samym wierszu) poleceniem, które ma zostać wykonane.
W naszym przypadku:
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>
Wyznaczone polecenie "/home/user-A/.ssh/allowed-commands.sh id-clip"i tylko to wyznaczone polecenie jest wykonywane za każdym razem, gdy klawisz id-clipjest używany do zainicjowania sshpołączenia host-A- bez względu na to, jakie polecenie jest zapisane w sshwierszu poleceń .
Polecenie wskazuje plik skryptu allowed-commands.sh, a zawartość tego pliku to
#/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
Pierwotnym wezwaniem sshna maszynę Bbyło
... | ssh <user-A>@<host A> to_clipboard
Ciąg to-clipboardjest przekazywany do allowed-commands.shzmiennej środowiskowej SSH_ORIGINAL_COMMAND. Dodatkowo przekazaliśmy nazwę klucza id-clipz linii, do authorized_keysktórej ma dostęp tylkoid-clip .
Linia
notify-send "ssh to-clipboard, from ${Id}"
to tylko wyskakujące okienko z wiadomością, które informuje, że trwa pisanie schowka - to prawdopodobnie dobra funkcja bezpieczeństwa. ( notify-senddziała na Ubuntu 18.04, może nie inne).
W linii
cat | xsel --display :0 -i -b
parametr --display :0jest niezbędny, ponieważ proces nie ma własnego wyświetlacza X ze schowkiem, więc musi być wyraźnie określony. Ta wartość :0działa na Ubuntu 18.04 z serwerem okien Wayland. W innych konfiguracjach może nie działać. W przypadku standardowego serwera X ta odpowiedź może pomóc.
host-A /etc/ssh/sshd_config parametry
Na koniec kilka parametrów /etc/ssh/sshd_configna hoście, Aktóre należy ustawić, aby zapewnić pozwolenie na połączenie i pozwolenie na używanie ssh-key tylko bez hasła:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers user-A
Aby sshdserwer ponownie odczytał plik config
sudo systemctl restart sshd.service
lub
sudo service sshd.service restart
wniosek
Konfiguracja to-clipboardwymaga pewnego wysiłku, ale inne funkcje oprócz tego mogą być konstruowane równolegle w tym samym frameworku.
:'<,'>w !ssh desktop pbcopy