Sherlock добрался (1), для (2) xargs
обычно предпочтительно, поскольку это допускает более разумный синтаксис и меньше вызова оболочки наверху. Знайте -print0
и -0
опции найти и xargs соответственно как пути с пробелами и специальными символами могут засорить работы.
Для одноразового выполнения действительно не должно иметь значения различие, если Вы не chmodding огромное дерево. Если бы Вы делаете это достаточно часто для формализации в сценарий, я использовал бы xargs.
Это легче к цепочке ssh с ssh, чем к цепочке ssh с sudo. Так изменение ssh конфигурации сервера в порядке, я предлагаю открыть ssh для корня каждого сервера, но только от localhost. Можно сделать это с a Match
пункт в sshd_config
:
PermitRootLogin no
Match Host localhost
PermitRootLogin yes
Затем можно настроить основанную на ключе цепочку аутентификации от удаленного пользователя локальному пользователю и от локального пользователя для укоренения. У Вас все еще есть след аутентификации, таким образом, Ваши журналы говорят Вам, кто вошел в систему как корень, и шаги аутентификации совпадают с, если sudo был включен.
Для соединения с сервером как корень определите псевдоним в ~/.ssh/config
как это:
Host server-root
HostName server.example.com
User root
ProxyCommand "ssh server.example.com nc %h %p"
Если Вы настаиваете на том, чтобы использовать sudo
, Я полагаю, что Вы должны будете разделить команды, как sudo
настаивает на том, чтобы читать из терминала (даже если он имеет билет на Вашу учетную запись), v, и ни один из обычных методов копирования файла (scp, sftp, rsync) поддержка, взаимодействующая с удаленным терминалом.
Придерживаясь ssh и sudo, Ваши предложенные команды могли быть упрощены. На каждой стороне, если у Вас есть sudo, настроенный для не выяснения у пароля снова, можно выполнить его однажды для преобладания с требованием пароля и другое время для копирования файла. (Вы не можете легко скопировать файл непосредственно, потому что подсказка пароля мешает.)
ssh -t source 'sudo true'
ssh -t target 'sudo true'
ssh -t source 'sudo cat squid.conf' |
ssh -t target 'sudo tee /etc/squid/squid.conf'
¹, если Вы не имеете NOPASSWD
, но затем Вы не спросили бы это.
Можно настроить sudo
не спросить пароль следующий путь:
На источнике:
user ALL=NOPASSWD:/bin/cat
На цели:
user ALL=NOPASSWD:/usr/bin/tee
И сделайте на yur машине:
ssh source 'sudo cat /test' | ssh target 'sudo tee /test'
Но я рекомендую использовать что-то как марионетка. Это намного лучше, и легче решает Вашу проблему с распределением файлов конфигурации.
PS. Между прочим, если Вы настроите sudo
спросить пароль от пользователя, строки с [sudo] password for user
появится в конечном файле.
Вместо того, чтобы использовать ssh можно использовать scp для передачи файла между серверами.
Войдите в целевой сервер:
Изменитесь на целевой dir, где Вы хотите скопировать файл.
#scp -r -p -P 22 root@source-ipaddress:/source-path-file-to-copy .
r - рекурсивный p - Сохраняет время изменения, времена доступа и режимы из исходного файла
без изменения конфигурации SSH, вы можете создавать два узла SSH Tunnels -> Server1 и Server2-> хост через SSH-соединение с сервером2. Подключите эти два туннеля на хост-машине (тот же порт). И запустите Sudo на Server2, чтобы извлечь данные с подключенных туннелей на Server1 и сохранить их на Server2.
ssh -L60000:${source}:22 -R60000:localhost:60000 -t ${target} 'sudo bash -c "ssh -p 60000 '$(whoami)'@localhost \"cd /path/to/dir; tar -czf - files\"|tar -C/path/to/target -xzf -"'
Идея: 1- Чтобы создать локальный туннель с вашей машины в исходную машину на порту 60000
ssh -L60000:${source}:22
1b- Создайте удаленный туннель, чтобы добраться до вашего компьютера
-R60000:localhost:60000
2- Подключение к целевому аппарату
-t ${target}
. 3 - выполните все как root На целевой машине для написания
'sudo bash -c "..."'
4- подключиться к исходной машине через туннель. WHOAMI и Localhost означают локальныйhost на машине $ {Targe}.
ssh -p 60000 '$(whoami)'@localhost
5- Упакуйте удаленный файл (ы) и отправьте его на Zipped в STDOUT
cd /path/to/dir; tar -czf - file
6- Получите пакет через STDOUT и извлечь файлы соответственно на каталоге / path / to / tarc
|tar -C/path/to/target -xzf -
Примечание: вы можете получить до 3 SSHKey подтверждений и 3 запроса на пароль. Но файлы будут скопированы.
Match host localhost
. – cduck 29.08.2017, 14:10