Bu cevap, daha fazla güvenlik ekleyerek hem seçilen cevap üzerine gelişir .
Bu cevap genel formu tartıştı
<command that makes output> | \
ssh <user A>@<host A> <command that maps stdin to clipboard>
Nerede güvenlik yoksun olabilir içindedir sshizinleri izin <user B>üzerine host B>kadar sshiçine host Ave yürütmek herhangi komutu.
Tabii Biçin Aerişim zaten tarafından kapılı edilebilir sshanahtarın ve hatta bir şifreye sahip olabilir. Ancak başka bir güvenlik katmanı, Bçalıştırılabilen izin verilebilir komutların kapsamını kısıtlayabilir A, örneğin rm -rf /çağrılamaz. (Bu, özellikle sshanahtarın bir parolası yoksa önemlidir .)
Neyse ki, komut kısıtlaması veya zorunlu komutssh adı verilen yerleşik bir özellik var . Bkz. Ssh.com veya bu serverfault.com sorusu .
Aşağıdaki çözüm, uygulanan ssh komut kısıtlamasıyla birlikte genel form çözümünü göstermektedir .
Komut kısıtlaması eklenmiş örnek çözüm
Bu güvenliği artırılmış çözüm genel formu izler - sshoturumdaki çağrı host-Bbasitçe:
cat <file> | ssh <user-A>@<host A> to_clipboard
Bunun geri kalanı bunu işe yarayacak düzeneği gösterir.
Kur ssh komutu kısıtlaması
Kullanıcı hesabının açık Bolduğunu user-Bve B'nin id-clipher zamanki gibi oluşturulmuş bir ssh anahtarı olduğunu varsayalım ( ssh-keygen).
Sonra user-Assh dizininde bir dosya var
/home/user-A/.ssh/authorized_keys
anahtarı id-cliptanır ve sshbağlantıya izin verir .
Genellikle her satırın içeriği authorized_keystam olarak yetkilendirilen ortak anahtardır, örneğin id-clip.pub.
Ancak, ortak anahtar içeriğinin yürütülecek komutla (aynı satırda) önüne getirildiği komut kısıtlamasını uygulamak .
Bizim durumumuzda:
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>
Komuta etmek üzere dizayn "/home/user-A/.ssh/allowed-commands.sh id-clip"ve sadece anahtar her komutu belirlenen ki yürütüldüğünde id-clipkullanılan bir başlatmak sshiçin bağlantıyı host-A- yazılanları komutu olursa olsun sshkomut satırı .
Komut bir komut dosyasını belirtir allowed-commands.shve bu komut dosyasının içeriği
#/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
Orijinal çağrı sshmakinede Boldu
... | ssh <user-A>@<host A> to_clipboard
Dize to-clipboard, allowed-commands.shortam değişkeni tarafından iletilir SSH_ORIGINAL_COMMAND. Ek olarak, yalnızca erişildiği id-clipsatırdan anahtarın adını geçtik .authorized_keysid-clip
Çizgi
notify-send "ssh to-clipboard, from ${Id}"
panonun yazıldığını bildiren bir açılır mesaj kutusu - bu muhtemelen iyi bir güvenlik özelliği. ( notify-sendUbuntu 18.04 üzerinde çalışır, belki diğerleri değil).
Çizgide
cat | xsel --display :0 -i -b
parametre --display :0, işlemin pano ile kendi X ekranına sahip olmaması nedeniyle gereklidir, bu nedenle açıkça belirtilmelidir. Bu değer :0Wayland pencere sunucusu ile Ubuntu 18.04 üzerinde çalışır. Diğer kurulumlarda çalışmayabilir. Standart bir X sunucusu için bu cevap yardımcı olabilir.
host-A /etc/ssh/sshd_config parametreler
Son olarak /etc/ssh/sshd_config, ana bilgisayarda A, bağlanma iznini sağlamak için ayarlanması gereken birkaç parametre ve ssh-key komutunu yalnızca parola olmadan kullanma izni :
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers user-A
Yapmak için sshdsunucu yapılandırma yeniden okumak
sudo systemctl restart sshd.service
veya
sudo service sshd.service restart
Sonuç
Kurmak biraz çaba gerektiriyor, ancak diğer işlevler to-clipboardaynı çerçeveye paralel olarak inşa edilebilir.
:'<,'>w !ssh desktop pbcopy