~/.ssh/config
IP adreslerini ana bilgisayar adı olarak kullanırken bunu başaramazsınız . Ek olarak, aslında sadece farklı IP adreslerine değil, aynı zamanda farklı bağlantı noktalarına da bağlanmamanız nedeniyle, DNS çözümleyicinizde herhangi bir değişiklik yapmamanız gerektiği için ortaya çıkmıştır.
Düzeltilmiş durumdayım - Match originalhost ... exec ...
combo in kullanabilirsiniz ~/.ssh/config
- @ MichałPolitowski'nin cevabını görün . Bununla birlikte, OpenSSH için gayet iyi çalışmasına rağmen, diğer SSH istemcilerinde benzer işlevleri mutlaka bulamayabilirsiniz.
ssh
Hangi ağ üzerinde bulunduğunuzu kontrol edecek ve uygun Host
girişi kullanacaksanız, basit bir sarmalayıcı (çeşitli kabuklardan kullanmanız gerekirse bir kabuk işlevi veya bir komut dosyası) kullanarak bu sorunu çözebilirsiniz . Asıl soru, hangi ağda olduğunuzun güvenilir şekilde nasıl tespit edilebileceğidir. Yerel IP adresi akla geliyor, ancak güvenilir değil, çünkü çalışma ağınızla aynı alt ağı kullanan bir LAN’dan bağlanıyor olabilirsiniz.
Hem yerel hem de uzak ağlar için aynı bağlantı noktasına sahipseniz /etc/resolv.conf
, bulunduğunuz ağa bağlı olarak düzenleyebilirsiniz - açıkçası otomatik olarak yapılması gerekir (büyük olasılıkla DHCP istemcinizin bir kod dosyasından). Veya - daha iyi - yerel isim sunucusunu çalıştırın (örneğin, örneğin dnsmasq
) ve uygun konfigürasyon ile verin. Bu olsa da bu sorunun kapsamı dışındadır.
Başka bir seçenek - yalnızca etkileşimli olarak bağlanmanız gerekiyorsa - tarama yapacak komut tamamlamayı kullanmaktır ~/.ssh/config
. Bu size biraz yazmaktan tasarruf sağlar (özellikle de yeterince değişken girdiyseniz Host
). Bunun gibi bir şey ( bash
başlangıç için):
# complete session names for ssh
declare -g _ssh_complete_hostlist 2> /dev/null
function _ssh_complete_init () {
_ssh_complete_hostlist=$( \
sed -nr '/^\s*Host\s*=/{s/^[^=]+= *//;s/ /\n/g;p}' ~/.ssh/config \
| sort )
}
_ssh_complete_init
function _ssh_complete () {
local match=${COMP_WORDS[${COMP_CWORD}]}
local hosts=
local default=
for h in $_ssh_complete_hostlist; do
if [[ $h =~ ^$match ]]; then
hosts="$hosts $h"
fi
done
if ! (( ${COMP_CWORD} == ${#COMP_WORDS[@]}-1 )); then
default=$( compgen -f ${COMP_WORDS[${COMP_CWORD}]} )
fi
COMPREPLY=($hosts $default)
}
complete -F _ssh_complete ssh
İlk işlev, ana bilgisayarların tamamlandığı bir liste oluşturur (genellikle bunu her kabukta bir kez çalıştırmak yeterlidir), ikincisi ise, biraz sakarca olsa da, asıl tamamlamayı yapar - yalnızca ana bilgisayar adını tamamlandığı zaman tamamlar. komut satırındaki son simge.
Bütün bunlar, bu soruna yaklaşmanın doğru yolunun, bir VPN üzerinden iş ağına bağlanmak olduğunu ve böylece yerel iş IP adreslerini ofisteymiş gibi erişilebilir olmasını sağlamak olduğunu söyledi. Daha sonra adresi, hangi katmanı tercih ederseniz edin ~/.ssh/config
, /etc/resolv.conf
veya (en iyi seçenek) ofis adı sunucusuna bağlayabilirsiniz.
/etc/hosts
bunu başarmak için birinin SSH config dosyasıyla mı yoksa biriyle mi dolaşabileceği ? Ya da belki şu anda hangi LAN'a bağlı olduğunuzu tespit etmenin bir yolu?