Можно генерировать использование с открытым ключом ssh-keygen -y
. Если Ваш закрытый ключ находится в месте по умолчанию, можно использовать следующее для помещения открытого ключа на то же место:
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
Прототип!
Способ сделать это было бы следующим сценарием, работающим на хосте:
#!/bin/bash
# host: bind-mount
PREFIX="~/myroot"
MNT="/mnt"
MNT=${MNT#/}
CMD=$PREFIX/$MNT/.mounts.cmd
OUT=$PREFIX/$MNT/.mounts.out
ERR=$OUT
#ERR=$PREFIX/$MNT/.mounts.err
echo "Using prefix $PREFIX"
if ! [ -d $PREFIX/$MNT ]; then
mkdir -p $PREFIX/$MNT
echo "Created $PREFIX/mnt"
fi
for i in $CMD $OUT $ERR; do
if ! [ -e $i ]; then
mkfifo $i
echo "Created $i"
fi
done
trap "exit 0" SIGINT
while true; do
( # subshell for better output redirection
line=$(cat $CMD)
# FIXME there's a problem if this script doesn't react fast
# enough such that .mounts.cmd contains more than one line...
# This is a VERY primitive parser of arguments that will fail
# in many situations, hence PROTOTYPE
if [ "$line" == "QUIT" ]; then
exit 254;
fi
isopttype=false
for para in $line; do
if $isopttype; then
switches="$switches$para "
isopttype=false
else
case $para in
-a)
echo "mount -a not supported!" >&2
exit 253
;;
-o|-O|-t)
isopttype=true
switches="$switches$para "
;;
-*)
switches="$switches$para "
;;
*)
if [ -z "$src" ]; then
src=$para
elif [ -z "$dest" ]; then
dest=$para
else
echo "Confused by $para after src=$src and dest=$dest" >&2
exit 252
fi
;;
esac
fi
done
if [ -z "$src" ] || [ -z "$dest" ]; then
echo "Please provide both mount source and destination!" >&2
exit 251
fi
mount $PREFIX/${src#/} $dest $switches && mount --bind $dest $PREFIX/${dest#/}
) >>$OUT 2>>$ERR
[[ $? == 254 ]] && exit 0
done
for i in $CMD $OUT $ERR; do
rm $i
done
Это слушает именованный канал (~/myroot/mnt/.mounts.cmd
), который chroot
редактор mount
запишет во вместо того, чтобы делать фактическое монтирование, и после монтирования на хосте связывают - монтируют новое монтирование к chroot
- среда.
chroot
редактор mount
заменяется этим:
#!/bin/bash
# chroot: talk to hosts mount-listener
MNT="/mnt"
CMD=$MNT/.mounts.cmd
OUT=$MNT/.mounts.out
ERR=$OUT
#ERR=$MNT/.mounts.err
echo "$@" > $CMD
cat < $OUT # TODO output $ERR to stderr
mount
тихо игнорирование этого :(
– Tobias Kienzler
13.11.2013, 10:33