С помощью awk
:
... | awk -F'= ' '{gsub(", ", "\\|", $2); print $2}'
-F '= '
устанавливает разделитель полей как =
gsub(", ", "\\|", $2)
заменяет все ,
на \|
во втором поле на место
print $2
печатает второе поле
Пример:
$ awk -F'= ' '{gsub(", ", "\\|", $2); print $2}' <<<'LST = fr, de, pl, ru, ch, us, uk, ca'
fr\|de\|pl\|ru\|ch\|us\|uk\|ca
Я сделал это с двумя прыжками, но это должно работать для трех. Самый простой способ - установить файл ~ / .ssh / config
на каждом хосте. Итак, если вы хотите быть на hosta
и попасть на hostd
через hostb
и hostc`, вы можете настроить свои конфигурации следующим образом:
In ] hosta: ~ / .ssh / config
:
Host hostd
User username
ProxyCommand ssh hostb nc %h %p 2> /dev/null
В hostb: ~ / .ssh / config
:
Host hostd
User username
ProxyCommand ssh hostc nc %h %p 2> /dev/null
В hostc: ~ / .ssh / config
:
Host hostd
User username
ProxyCommand ssh hostd nc %h %p 2> /dev/null
Затем вы можете ssh hostd
на любом из хостов в цепочке, и вы попадете на hostd
.
Использование netcat для прокси не влияет на scp
.
Если по какой-то причине вы действительно не хотите использовать локальные файлы ~ / .ssh / config
, вы можете сделать это на hosta
:
ssh -oProxyCommand='ssh -oProxyCommand=\'ssh -o ProxyCommand=\\\'ssh username@hostd nc %h %p 2>/dev/null\\\' username@hostc nc %h %p 2> /dev/null' username@hostb nc %h %p 2> /dev/null' username@hostd
Версия nc
больше не рекомендуется. Используйте переключатель -W
, который предусмотрен в последних версиях OpenSSH. Также не нужно копировать конфиг на другие хосты! Вся настройка должна выполняться на вашем хосте, и она никоим образом не мешает работе scp
. Просто создайте файл ~ / .ssh / config
с:
Host jumphost1
User username1
Host jumphost2
User username2
ProxyCommand ssh -W %h:%p jumphost1
Host jumphost3
User username3
ProxyCommand ssh -W %h:%p jumphost2
Host server
User username4
ProxyCommand ssh -W %h:%p jumphost3
А затем подключитесь с помощью ssh-сервера
или используйте scp file server: path /
. Если вы настаиваете на единственном указателе (или не уверены, что вы имеете в виду, говоря о вложении ProxyCommand
), то, как уже отмечалось, это адский выход:
ssh -oProxyCommand= \
'ssh -W %h:%p -oProxyCommand= \
\'ssh -W %h:%p -oProxyCommand= \
\\\'ssh -W %h:%p username1@jumphost1\\\' \
username2@jumphost2\' \
username3@jumphost3' \
username4@server
Вам в основном нужно идти изнутри.