Использование конструкций shell,
uniq -c file | while read a b; do if (( $a & 1 == 1 )); then echo $b; fi done
Я бы порекомендовал использовать ssh agent - в этом случае вам понадобится только одна пара ключей, где ваша личная часть хранится на вашей рабочей станции. Нет необходимости реплицировать его на другие серверы (что само по себе плохая идея) или создавать другие пары ключей для определенных серверов.
Есть еще один способ запустить ssh-агент, вы можете прочитать об этом там . Вот самый простой:
eval ($ ssh-agent)
затем вы добавляете свой ключ (и) к агенту
ssh-add /path/to/private.key
Это спрашивает вас для парольной фразы, если ваш ключ защищен. После добавления вы можете без запроса подключаться к серверам, имеющим общедоступную часть.
Более того, вы можете продолжить ssh'ing с этого сервера на другой, и агент продолжит вашу аутентификацию, пока для параметра AllowAgentForwarding ssh-серверов на вашем пути установлено значение «да», то есть в основном настройка по умолчанию.
Ну, это было предисловие :)
А теперь вернемся к вашему случаю. Если переадресация портов не запрещена конфигурацией сервера, подход следующий:
ssh ubuntu @ SERVER1 'echo Hi from $ (hostname)'
ssh -t ubuntu @ СЕРВЕР1 ssh СЕРВЕР2 'Привет, от $ (имя хоста)'
ssh -R localhost: 50000: СЕРВЕР2: 22 -Nv
и оставьте это окно терминала пока открытым.
[SERVER1] ssh -p 50000 localhost 'echo Hi from $ (hostname)'
вы должны увидеть Hi from SERVER2
Если все 4 шага выше работают для вас, вы сможете выполнить команду rsync - просто опустите -i часть
Три шага:
Создайте ~/.ssh/config
на SERVER1
со всем необходимым для подключения к SERVER2
, например:
Host SERVER2
Порт 50000
Пользователь user2
Имя хоста localhost
IdentityFile ~/path/to/pem/file.pem
Попробуйте подключиться к хостам SERVER2
без аргументов (с SERVER1
после инициирования проброса портов):
ssh SERVER2 # работает?
Если нет, добавьте -vvv
и выясните, что пошло не так.
Запустите команду rsync:
ssh -i ~/path/to/pem/file.pem -R localhost:50000:SERVER2:22 ubuntu@SERVER1 \
'rsync -vur /home/ubuntu/test SERVER2:/home/ubuntu/test'
Обратите внимание, что ключ аутентификации должен быть доступен на SERVER1
, если вы хотите сделать это таким образом. Лучше создать новый ключ там, чем копировать закрытый ключ с вашей машины.