Подключение к целевому хосту через промежуточный хост без предварительного обмена ключами

bash 4.3 добавил поддержку ksh93-подобных namerefs.

Поэтому в bash-4.3 и выше вы можете сделать:

a0[5]=whatever
x=0
typeset -n var="a$x"
printf '%s\n' "${var[5]}"

Но обратите внимание, что это ссылка (указатель, а не копия) на переменную name, а не сама переменная (разница имеет значение, когда у вас есть несколько переменных с одним и тем же именем в разных контекстах, как для локальных переменных в функциях).

bash скопировал ksh массивы с их неудобным дизайном. Сделать копию массива в bash сложно, вы можете использовать вспомогательную функцию типа:

copy_array() { # Args: <src_array_name> <dst_array_name>
  eval '
    local i
    '"$2"'=()
    for i in "${!'"$1"'[@]}"; do
      '"$2"'[$i]=${'"$1"'[$i]}
    done'
}

Для использования, например, как:

$ a0[5]=123
$ x=0
$ copy_array "a$x" var
$ typeset -p var
declare -a var=([5]="123")

kshbash, который копирует ksh) - единственная оболочка, где массивы являются разреженными (или являются ассоциативными массивами, ключи которых ограничены целыми положительными числами) (также единственные массивы с индексами, начинающимися с 0, а не с 1, или где $array неинтуитивно расширяется не до элементов, а до элемента с индексом 0). С другими оболочками все гораздо проще.

  • rc: array_copy = $array
  • fish: set array_copy = $array
  • csh: set array_copy = ($array:q)
  • zsh или yash: array_copy=("${array[@]}"}

Для косвенного копирования (где $var содержит имя исходного массива):

  • rc: eval array_copy = '$'$var
  • fish: eval set array_copy \$$var
  • csh: eval "set array_copy = (\$$${var}:q)"
  • zsh: array_copy=("${(@P)var}")
  • yash (or zsh): eval 'array_copy=("${'"$var"'[@]}")'
1
06.05.2017, 02:48
1 ответ

Все решения требуют некоторой предварительной настройки (поскольку по умолчанию между независимыми системами нет доверительных отношений - если бы они были, это было бы серьезной проблемой безопасности).

Вы можете добавить свой открытый ключ в процесс предоставления/установки новых серверов, вы можете добавить ключи центра сертификации, которые будут доверенными, как указано @UlrichSchwarz, или вы можете присоединиться к ним в домене Kerberos и аутентифицироваться с помощью билетов kerberos.

Возможностей много, но из коробки ничего вам не подойдет.

Прочитав ваш вопрос в третий раз, я больше не уверен, что правильно понял ваш вопрос. Возможно, вы просто ищете переадресацию ssh-agent? Если нет, уточните.

1
27.01.2020, 23:45

Теги

Похожие вопросы