dracut-kdump: Use proper the known hosts entry in the file known_hosts
Once login using ssh, the ssh will store the known hosts entry to the local ~/.ssh/known_hosts. From now, we can login using ssh automaticly. The ssh will check the ~/ssh/.known_hosts entry, if set the option StrictHostKeyChecking=yes/ask in the config or command line, when you want to login the target. the default value of StrictHostKeyChecking is ask. And the kdump using the ssh will append the option StrictHostKeyChecking=yes in the command line. We can using following ip to connect peer machine, if enable the ipv6. fe80::5054:ff:fe48:ca80%eth0 Obviously, above ip contains the ethX. Kdump will add the prefix "kdump-" before ethX to avoid flowing netdevice name in case netdevice names ethX in the 2nd kernel. So the ip address will change to fe80::5054:ff:fe48:ca80%kdump-eth0. Kdump will login the target manully in the 2nd kernel, because of the option StrictHostKeyChecking=yes and inexistence known hosts entry in the local ~/.ssh/known_hosts. Hence dumping core will fail. In order to login automaticly using ssh, we should add the prefix "kdump-" before ethX in the local ~/.ssh/known_hosts. Signed-off-by: Minfei Huang <mhuang@redhat.com>
This commit is contained in:
parent
08809fb0c7
commit
63476302aa
@ -131,6 +131,27 @@ get_host_ip()
|
||||
return 0
|
||||
}
|
||||
|
||||
# kdump will change the ethernet device name in the 2nd using prefix "kdump-",
|
||||
# the link scope of ipv6 has the format like fe80::5054:ff:fe48:ca80%eth0,
|
||||
# So we should correct the known hosts
|
||||
correct_known_hosts()
|
||||
{
|
||||
if is_ipv6_target && is_ssh_dump_target; then
|
||||
local _ipv6 _netdev _pre_netdev
|
||||
local _known_hosts="/root/.ssh/known_hosts"
|
||||
local _srcaddr=$(get_option_value ssh)
|
||||
|
||||
[ "x" = "x""$_srcaddr" ] && return 1
|
||||
|
||||
if `echo $_srcaddr | grep -q "%"`; then
|
||||
_ipv6=`get_remote_host $_srcaddr`
|
||||
_netdev=${_srcaddr#*-}
|
||||
_pre_netdev=$(kdump_setup_ifname $_netdev)
|
||||
sed -i "s#$_ipv6\%$_netdev#$_ipv6\%$_pre_netdev#" $_known_hosts
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
read_kdump_conf()
|
||||
{
|
||||
if [ ! -f "$KDUMP_CONF" ]; then
|
||||
@ -175,6 +196,8 @@ if [ $? -ne 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
correct_known_hosts
|
||||
|
||||
if [ -z "$DUMP_INSTRUCTION" ]; then
|
||||
add_dump_code "dump_fs $NEWROOT"
|
||||
fi
|
||||
|
@ -97,22 +97,6 @@ kdump_get_perm_addr() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Prefix kernel assigned names with "kdump-". EX: eth0 -> kdump-eth0
|
||||
# Because kernel assigned names are not persistent between 1st and 2nd
|
||||
# kernel. We could probably end up with eth0 being eth1, eth0 being
|
||||
# eth1, and naming conflict happens.
|
||||
kdump_setup_ifname() {
|
||||
local _ifname
|
||||
|
||||
if [[ $1 =~ eth* ]]; then
|
||||
_ifname="kdump-$1"
|
||||
else
|
||||
_ifname="$1"
|
||||
fi
|
||||
|
||||
echo "$_ifname"
|
||||
}
|
||||
|
||||
kdump_setup_bridge() {
|
||||
local _netdev=$1
|
||||
local _brif _dev _mac _kdumpdev
|
||||
|
50
kdump-lib.sh
50
kdump-lib.sh
@ -138,3 +138,53 @@ check_save_path_fs()
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# Prefix kernel assigned names with "kdump-". EX: eth0 -> kdump-eth0
|
||||
# Because kernel assigned names are not persistent between 1st and 2nd
|
||||
# kernel. We could probably end up with eth0 being eth1, eth0 being
|
||||
# eth1, and naming conflict happens.
|
||||
kdump_setup_ifname() {
|
||||
local _ifname
|
||||
|
||||
if [[ $1 =~ eth* ]]; then
|
||||
_ifname="kdump-$1"
|
||||
else
|
||||
_ifname="$1"
|
||||
fi
|
||||
|
||||
echo "$_ifname"
|
||||
}
|
||||
|
||||
# get ip address or hostname from nfs/ssh config value
|
||||
get_remote_host()
|
||||
{
|
||||
local _config_val=$1
|
||||
|
||||
# in ipv6, the _config_val format is [xxxx:xxxx::xxxx%eth0]:/mnt/nfs or
|
||||
# username at xxxx:xxxx::xxxx%eth0. what we need is just xxxx:xxxx::xxxx
|
||||
_config_val=${_config_val#*@}
|
||||
_config_val=${_config_val%:/*}
|
||||
_config_val=${_config_val#[}
|
||||
_config_val=${_config_val%]}
|
||||
_config_val=${_config_val%\%*}
|
||||
echo $_config_val
|
||||
}
|
||||
|
||||
# check the remote server ip address tpye
|
||||
is_ipv6_target()
|
||||
{
|
||||
local _server _server_tmp
|
||||
|
||||
if is_ssh_dump_target; then
|
||||
_server=`get_option_value ssh`
|
||||
elif is_nfs_dump_target; then
|
||||
_server=`get_option_value nfs`
|
||||
fi
|
||||
|
||||
[ -z "$_server" ] && return 1
|
||||
_server=`get_remote_host $_server`
|
||||
_server_tmp=$_server
|
||||
_server=`getent ahosts $_server | head -n 1 | cut -d' ' -f1`
|
||||
_server=${_server:-$_server_tmp}
|
||||
echo $_server | grep -q ":"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user