Я рекомендую изменить вашу ProxyCommand
с использования nc
на -W
. Например:
ProxyCommand ssh -l USERNAME BASTIONHOST1 -W %h:%p
У него меньше требований к хосту-бастиону, поэтому вероятность его выхода из строя в случае, если администратор решит изменить настройку хоста-бастиона, меньше.
Я не думаю, что есть какой-то способ пролистать между разными pac-файлами. Но вы можете более или менее просто объединить два файла pac - с одной небольшой оговоркой. Точка входа будет существовать в обоих файлах. Вам нужно будет переименовать точку входа в исходном pac-файле, и в ваших собственных дополнениях вы сможете выполнять вызовы переименованной версии функции.
Исторически точкой входа была функция FindProxyForURL. Некоторые новые браузеры имеют расширения, которые активируются с помощью точки входа с другим именем.
Si enmascaras $2 en ambos casos y en los posteriores, evitas que los $2 no sean nada cuando estén vacíos.
#!/bin/bash
echo $1;
if [ -n ${2+x} ] ; then
if [ "$2" != "log" -a "$2" != "cat" ] ; then
echo "$0 $1 : second argument must be empty, "tail" or "cat""
exit 1
fi
(con idioma alemán):
> echo $([ != "log" -a != "cat" ])
> bash: [: Zu viele Argumente.
comparar:
> echo $([ "" != "log" -a "" != "cat" ])
>
Un segundo problema podría ser que primero verifique log y cat, pero dígale al usuario que está buscando tail y cat.
Personalmente, creo que toda la idea de preguntar repetidamente "¿Reconectar?" es una abominación que, en el mejor de los casos, duplica sin sentido el historial de comandos de tu caparazón, pero es mucho, mucho peor. En serio, ¿qué tan difícil es simplemente ejecutar ssh root@remotehost tail -f /var/log/dp.log
y luego presionar Arriba -FlechaIngresar si desea ejecutarlo nuevamente? o simplemente escriba un par de funciones de shell o pequeños scripts si no desea escribir el comando completo ni una sola vez (, consulte los ejemplos a continuación ).
Dicho esto, aquí hay una mejor manera de hacer lo que estás tratando de hacer:
#!/bin/bash
error() {
local ec msg
ec="$1" ; shift
msg="$*"
[ -n "$msg" ] && echo "$msg" >&2
[ "$ec" != 0 ] && exit "$ec"
}
[ -z "$1" ] && error 1 "first argument missing. must be hostname"
echo "$1"
myssh() {
local remote reconnect quit
remote="$1" ; shift
quit=0
while [ $quit != 1 ] ; do
ssh -o StrictHostKeyChecking=no -p 2222 "$remote" "$@"
read -p "Reconnect (Y/n) [Y]? " reconnect
[[ $reconnect =~ ^[Nn] ]] && quit=1
done
}
case "$2" in
cat|log) myssh "root@$1" cat /var/log/dp.log ;;
tail) myssh "root@$1" tail -f /var/log/dp.log ;;
"") myssh "root@$1" ;;
*) error 1 "Unknown second argument '$2'" ;;
esac
He aquí una forma aún mejor de hacerlo.
Agregue ~/bin a su $PATH y luego cree los siguientes scripts (no olvide hacerlos ejecutables conchmod +x
)
~/bin/missh.sh:
#!/bin/sh
[ -z "$1" ] && echo hostname is required && exit 1
remote="$1" ; shift
ssh -o StrictHostKeyChecking=no -p 2222 "root@$remote" "$@"
~/bin/remoto -cat.sh:
#!/bin/sh
myssh.sh "$1" cat /var/log/dp.log
~/bin/remoto -tail.sh:
#!/bin/sh
myssh.sh "$1" tail -f /var/log/dp.log
Ejecútelos cuando los necesite. Utilice el historial de comandos -de su shell para ejecutarlos de nuevo con la frecuencia que desee.
myssh.sh
se puede usar para obtener un shell de inicio de sesión raíz en el host remoto Y(como lo demuestran los otros dos scripts )para ejecutar cualquier comando arbitrario como root en el host remoto.