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 ssh
izinleri izin <user B>
üzerine host B>
kadar ssh
içine host A
ve yürütmek herhangi komutu.
Tabii B
için A
erişim zaten tarafından kapılı edilebilir ssh
anahtarı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 ssh
anahtarı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 - ssh
oturumdaki çağrı host-B
basitç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 B
olduğunu user-B
ve B'nin id-clip
her zamanki gibi oluşturulmuş bir ssh anahtarı olduğunu varsayalım ( ssh-keygen
).
Sonra user-A
ssh dizininde bir dosya var
/home/user-A/.ssh/authorized_keys
anahtarı id-clip
tanır ve ssh
bağlantıya izin verir .
Genellikle her satırın içeriği authorized_keys
tam 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-clip
kullanılan bir başlatmak ssh
için bağlantıyı host-A
- yazılanları komutu olursa olsun ssh
komut satırı .
Komut bir komut dosyasını belirtir allowed-commands.sh
ve 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ı ssh
makinede B
oldu
... | ssh <user-A>@<host A> to_clipboard
Dize to-clipboard
, allowed-commands.sh
ortam değişkeni tarafından iletilir SSH_ORIGINAL_COMMAND
. Ek olarak, yalnızca erişildiği id-clip
satırdan anahtarın adını geçtik .authorized_keys
id-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-send
Ubuntu 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 :0
Wayland 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 sshd
sunucu 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-clipboard
aynı çerçeveye paralel olarak inşa edilebilir.
:'<,'>w !ssh desktop pbcopy