Sık sık belirli bir kümeden rasgele bir bilgisayara ssh gerekir (kümedeki tüm makineler aynıdır). Ancak, kümedeki kullanılabilir makineler kümesi sık sık değişir, bu nedenle, kullanılabilir kümemden isteğe bağlı bir ana bilgisayar adı döndüren ve gereksinimleriyle eşleşen (örneğin, çevrimiçi ve doğru işletim sistemini çalıştıran) bir komut dosyası var.
Ayrıca, kimlik doğrulaması için Kerberos (GSSAPIAuthentication) kimlik doğrulaması kullandığımı da unutmayın.
Şu anda, kullanıyorum ssh `get_host`. Bunun yerine idam etmek istiyorum ssh cluster. Bilinen bir ana makine adıyla, aşağıdakilerle bu kolaydır /ssh/config:
Host cluster
HostName static_host.cluster.domain.tld
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes
HostNameKodumu kullanarak dinamik olarak nasıl seçebilirim ? (Ya da SSH benim istenen işlevi desteklemek için farklı bir yöntem var mı?) Aşağıdaki gibi bir şey yapmak istiyorum, ama çalışmıyor:
Host cluster
HostName `get_host` # This does not work
...
GrawityProxyCommand , ana bilgisayarın adını alan ve sshbağlantısını kullanarak netcatveya bağlantısını kullanan bir komut dosyası olabileceğini gösterdi socat. Ancak, bu Kerberos kimlik bilgilerini iletmez. Bununla ilgili yardım da takdir edilmektedir.
DÜZENLE:
Bunu Kerberos ile istediğim gibi yapamazsın (kabul edilen cevaptaki yorumlara bakınız). Bu komut, komut satırı bağımsız değişkeninde dinamik yeniden yazma yapmak için ssh-wrapperbir sshdiğer ad olarak kullanıyorum ssh. Sağlam değil, ama benim için çalışıyor.
#!/bin/bash
# Mapping between host aliases and dynamically-generated hostname
declare -A MAP
MAP[cluster]=`gethost`
# Find and replace on all positional args
args=$*
for key in ${!MAP[@]}; do
replace=${MAP[$key]}
args=`echo ${args} | sed "s/\(^\|[[:space:]]\)${key}\(\$\|[[:space:]]\)/${replace}/"`
done
# Execute using called-name if not this script
if [ "ssh-wrapper" != "`basename $0`" ]; then
exec $0 ${args}
# Otherwise, assume ssh and execute
else
exec ssh ${args}
fi