එක්තරා පරිශීලකයෙකුට පමණක් විශේෂිත වූ ධාරක ලැයිස්තුවක් එක් කළ හැකිද? සමහර විට පරිශීලක විශේෂිත සත්කාරක ගොනුවක්ද?
මෙම යාන්ත්රණය /etc/hostsගොනුවේ ඇතුළත් කිරීම් ද අනුපූරක විය යුතුය .
එක්තරා පරිශීලකයෙකුට පමණක් විශේෂිත වූ ධාරක ලැයිස්තුවක් එක් කළ හැකිද? සමහර විට පරිශීලක විශේෂිත සත්කාරක ගොනුවක්ද?
මෙම යාන්ත්රණය /etc/hostsගොනුවේ ඇතුළත් කිරීම් ද අනුපූරක විය යුතුය .
Answers:
ඔබ සොයන ක්රියාකාරිත්වය glibc තුළ ක්රියාත්මක වේ. HOSTALIASESපරිසර විචල්යය සැකසීමෙන් ඔබට අභිරුචි ධාරක ගොනුවක් අර්ථ දැක්විය හැකිය . මෙම ගොනුවේ නම් තෝරාගනු ලබන්නේ gethostbyname( ප්රලේඛනය බලන්න ).
උදාහරණය (උබුන්ටු 13.10 හි පරීක්ෂා කර ඇත):
$ echo 'g www.google.com' >> ~/.hosts
$ export HOSTALIASES=~/.hosts
$ wget g -O /dev/null
සමහර සීමාවන්:
HOSTALIASESභාවිතා කරන යෙදුම් සඳහා පමණක් getaddrinfo(3)හෝgethostbyname(3)HOSTALIASESසැකසුම අහිමි කර ඇත. පිං සෙටූඩ් රූට් හෝ ක්රියාත්මක කිරීමේදී net_rawහැකියාව ලබා දී ඇත (එයට ICMP පැකට් වලට ඇහුම්කන් දිය යුතු නිසා), එබැවින් ඔබ ඇමතීමට පෙර දැනටමත් මුල් බැස ඇත්නම් මිස HOSTALIASESඑය ක්රියා pingනොකරනු pingඇත.nscdඅතර තිතක් නොමැතිව ධාරක නාම වලට සීමා වේ.
127.0.0.1 somedomain.com)
LD_PRELOADඋපක්රම වලට අමතරව . පද්ධති කිහිපයක වැඩ කළ හැකි සරල විකල්පයක් වනුයේ /etc/hostsඔබේම මාර්ගයක් වෙනුවට ආදේශ කිරීම සඳහා ධාරක නාම විභේදනය හසුරුවන පද්ධති පුස්තකාලයේ පිටපතක් ද්විමය සංස්කරණය කිරීමයි .
උදාහරණයක් ලෙස, ලිනක්ස් හි:
ඔබ භාවිතා නොකරන්නේ නම් nscd, libnss_files.soඔබේම ස්ථානයකට පිටපත් කරන්න:
mkdir -p -- ~/lib &&
cp /lib/x86_64-linux-gnu/libnss_files.so.2 ~/lib
(හවුල් පුස්තකාලය වෙනත් තැනක තිබිය හැක, උදා /lib/libnss_files.so.2)
දැන්, පිටපත ද්විමය-සංස්කරණය /etc/hostsකර එහි දිගට සමාන දිගක් ආදේශ කරන්න /tmp/hosts.
perl -pi -e 's:/etc/hosts:/tmp/hosts:g' ~/lib/libnss_files.so.2
/tmp/hostsඔබට අවශ්ය ප්රවේශය එක් කිරීමට සංස්කරණය කරන්න . සහ භාවිතා කරන්න
export LD_LIBRARY_PATH=~/lib
සඳහා nss_filesසොයා බැලීම සඳහා /tmp/hostsවෙනුවට /etc/hosts.
ඒ වෙනුවට /tmp/hosts, ඔබට එය සෑදිය හැකිය /dev/fd//3(මෙහි කප්පාදුවක් දෙකක් භාවිතා කිරීමෙන් දිගට /dev/fd//3සමාන වේ /etc/hosts), සහ කරන්න
exec 3< ~/hosts
උදාහරණයක් ලෙස විවිධ විධාන වලට විවිධ hostsගොනු භාවිතා කිරීමට ඉඩ ලබා දේ .
nscdස්ථාපනය කර ක්රියාත්මක වන්නේ නම් , ඔබට එකම උපක්රමයක් කිරීමෙන් එය මඟ හැරිය හැක, නමුත් මේ වතාවේ libc.so.6nscd සොකට් වෙත යන මාර්ගය (වෙනත් දෙයක් /var/run/nscd/socket) නැති මාර්ගයක් සමඟ ප්රතිස්ථාපනය කරන්න .
LD_LIBRARY_PATHපරිශීලකයාට අයත් නාමාවලියක් වෙත යොමු කිරීම වෙනස් කිරීම යන්නෙන් අදහස් කරන්නේ පරිශීලකයා විසින් මෙහෙයවනු ලබන වෙනත් ක්රියාවලියක් මඟින් පුස්තකාල වෙනුවට ආදේශ කිරීමෙන් ඇතිවන ඕනෑම නව ක්රියාවලියක් සඳහා සහයෝගය දැක්වීමට එම නාමාවලිය භාවිතා කළ හැකිය. libnss_files.soපැකේජ කළමණාකරු හරහා යාවත්කාලීන කිරීම් (ආරක්ෂක යාවත්කාලීන කිරීම් ඇතුළුව) පැච් කළ අනුවාදයේ පිළිබිඹු නොවේ. වෙනස් LD_LIBRARY_PATHකිරීම සාමාන්යයෙන් වෙනත් හේතූන් මත නිර්දේශ කිරීම නරක දෙයකි, නමුත් එම කරුණු නිසා එය අ wise ාන ය.
unshareවිධාන සමඟ සාදන ලද පුද්ගලික සවි කිරීම් අවකාශය ෂෙල් ක්රියාවලියකට පුද්ගලික / etc / ධාරක ගොනුවක් සැපයීමට භාවිතා කළ හැකි අතර පසුව එන ඕනෑම ළමා ක්රියාවලියක් එම කවචයෙන් ආරම්භ වේ.
# Start by creating your custom /etc/hosts file
[user] cd ~
[user] cat >my_hosts <<EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 news.bbc.co.uk
EOF
[user] sudo unshare --mount
# We're now running as root in a private mountspace.
# Any filesystem mounts performed in this private mountspace
# are private to this shell process and its children
# Use a bind mount to install our custom hosts file over /etc/hosts
[root] mount my_hosts /etc/hosts --bind
[root] cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 news.bbc.co.uk
[root] exec su - appuser
[appuser] # Run your app here that needs a custom /etc/hosts file
[appuser] ping news.bbc.co.uk
PING news.bbc.co.uk (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.062 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.026 ms
^C
--- news.bbc.co.uk ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.026/0.044/0.062/0.018 ms
unshare(2)අතර clone(2)එය මෙහි මැජික් වල කොටසකි. මෙයද බලන්න namespaces(7)සහ user_namespaces(7).
unshareඔබ වෙනත් ක්රියාවලියක් ක්රියාත්මක කළ යුතුය. එබැවින් එය ස්වයංක්රීයකරණය සඳහා ෂෙල් පිටපතකට ඇතුළත් කිරීම මුළුමනින්ම සුළුපටු නොවේ. එක් ක්රමයක් නම් මෙහි විස්තර කර ඇති පරිදි සම්පූර්ණ කේතයමsh -c තර්කයට යොමු කිරීමයි unshare: piware.de/2012/12/…
එක් විසඳුමක් නම්, එක් එක් පරිශීලකයා වෙන වෙනම සිටීමයි chroot, එබැවින් ඔවුනට වෙන වෙනම /etc/hostsසිටිය හැකිය.
මම එකම අවශ්යතාවයකට මුහුණ දුන්නෙමි, එබැවින් මම libnss-userhosts උත්සාහ කළෙමි, නමුත් එය බහු තෙරපුම් යෙදුම් වලින් අසමත් වේ. එබැවින් මම ලිබන්ස්-හෝම්හෝස්ට් ලියා ඇත. එය ඉතා අළුත් හා පරීක්ෂා කර ඇත්තේ මා විසින් පමණි. ඔබට ඒ සඳහා අවස්ථාවක් ලබා දිය හැකිය! එය /etc/host.conf, බහු අන්වර්ථ නාම සහ ප්රතිලෝම විසඳීම (නමට ලිපිනය) හි සමහර විකල්ප සඳහා සහය දක්වයි.
පහත සඳහන් දෑ තැබීම ~/.bashrcමා වෙනුවෙන් වැඩ කරයි. එය විධානයෙහි ඇති ධාරක නාමය ඇතුලත් කිරීම් මත පදනම් වූ ලිපිනයක් බවට පරිවර්තනය කරයි ~/.hosts. නම් ~/.hostsනොපවතියි හෝ ධාරක නාමය සොයා ගත නොහැකි නම් නොවේ ~/.hostsසාමාන්ය පරිදි, මෙම විධානය ක්රියාත්මක කරනු. මෙය අදාළ කාර්යයන්හි මුල් කොඩි සමඟ ක්රියා කළ යුතු අතර ධජ වලට සාපේක්ෂව ධාරක නාමය ස්ථානගත කර ඇති ස්ථානය කුමක් වුවත්, උදා ping -i 0.5 host1 -c 3. මෙම ~/.hostsගොනුව එසේ කිසිදු dupicate ධාරක වේ නම්, එම ලිපිනය, ධාරක සොයා ගැනීම සඳහා කවර හෝ ස්ථානයකට වඩා මනාප ගනී ~/.hostsභාවිතා කරනු ඇත.
$ cat ~/.bashrc
function resolve {
hostfile=~/.hosts
if [[ -f "$hostfile" ]]; then
for arg in $(seq 1 $#); do
if [[ "${!arg:0:1}" != "-" ]]; then
ip=$(sed -n -e "/^\s*\(\#.*\|\)$/d" -e "/\<${!arg}\>/{s;^\s*\(\S*\)\s*.*$;\1;p;q}" "$hostfile")
if [[ -n "$ip" ]]; then
command "${FUNCNAME[1]}" "${@:1:$(($arg-1))}" "$ip" "${@:$(($arg+1)):$#}"
return
fi
fi
done
fi
command "${FUNCNAME[1]}" "$@"
}
function ping {
resolve "$@"
}
function traceroute {
resolve "$@"
}
උදාහරණයක් ~/.hostsපහත දැක්වේ. එය අනුගමනය කරන්නේ එකම ආකෘතියකි /etc/hosts. අදහස් සහ සුදු අවකාශය නිවැරදිව හසුරුවනු ලැබේ.
$ cat ~/.hosts
# addresses and hostnames
stackexchange.com se
192.168.0.1 host1 # this is host1's address
login-node.inst.ac.uk login
මෙය ඔබට උපකාරී වේදැයි විශ්වාස නැත, නමුත් මම මෙහි පැමිණියේ මගේ පරිශීලකයාට පමණක් පහසුවෙන් ප්රවේශ විය හැකි කොතැනක හෝ සුරකින ලද “ධාරකයන්” එක් කිරීමට ක්රමයක් සොයමින්.
මට මූලිකවම අවශ්ය වූයේ අපගේ වැඩ ජාලයේ ඇතැම් පෙට්ටිවලට ලිස්සා යාමට හැකිවීමයි.
මම කළේ මගේ .bashrcගොනුවට අන්වර්ථ නාම එකතු කිරීමයි .
උදාහරණයක් ලෙස, ඔබ එකතු කළහොත්:
alias jrfbox='ssh jason@192.168.6.6'
ඔබගේ පතුලේ ~/.bashrc( ~ඔබගේ නිවාස නාමාවලිය වේ). ඔබ පිටව ගොස් නැවත පුරනය වූ පසු, ඔබට ටයිප් කළ හැකිය jrfbox, පහර දෙන්න Enter, එවිට එය සම්බන්ධ වේ.
man ssh_config.
~/.bashrc, සරලව කරන්න source ~/.bashrc.
. ~/.bashrc