У меня есть Linux-система на работе, в которую я часто захожу из дома. Блок Linux находится во внутренней сети, но есть блок, охватывающий обе сети, поэтому я могу войти так:
ssh -tA username@bridge.work.com ssh username@10.10.10.130
У меня есть пара файлов в ~/tmp, которые я хотел бы скопировать на мой локальный компьютер. (давайте назовем их ~/tmp/file1 ~/tmp/file2 и ~/tmp/file3 ради аргумента)
Я видел что-то вроде этой работы:
ssh -tA username@bridge.work.com ssh username@10.10.10.130 'tar cf - ~/tmp/file*' | tar xf -
Это приведет к архивированию файлов на удаленном компьютере, отправке результата в стандартный вывод, а затем передаче результатов в локальный архив, который распаковывает данные на локальный стандартный вывод.
Не работает:
На удаленной машине, если я бегу
tar cf - tmp/file* | md5sum
f1b776364c10dfc20500f228399a7c63 -
С локальной машины:
ssh -tA username@bridge.work.com ssh username@10.10.10.130 'tar cf - ~/tmp/file*' | md5sum
bc7436c9771ee2b4978ffd29b8b7ed36 -
Я предполагаю, что это, вероятно, порядок байтов snafu по сети ... В конце концов мне удалось обойти его, кодировав файл, перехватив его по сети, а затем локально расшифровав ... по какой-то причине я не смог получить правильный синтаксис для возможности tar | uuencode на удаленной стороне и uudecode | Унтар на местной стороне.
Я ищу хороший способ сделать все это за один шаг; желательно то, что я могу обернуть в функцию оболочки.