3

У меня есть файл на локальном компьютере, который я хочу скопировать на удаленный сервер с помощью программы SSH (не scp, не rsync, не sftp), локальный файл - это закрытый ключ SSL, и я не хочу создавать какие-либо временные копии на удаленный сервер во время передачи.

Пользователь root на удаленном сервере не может войти в систему по SSH из соображений безопасности, однако мой удаленный пользователь (с тем же именем, что и у моего локального пользователя) может вносить изменения root с помощью команды sudo после запроса пароля.

Проблема: Как мне скопировать локальный файл, войти через SSH, переключиться на пользователя root с запросом пароля sudo а затем записать файл на удаленный сервер в корневом каталоге, принадлежащем пользователю? И желательно все в одной строке команды!

2 ответа2

3

cat твой друг

cat key | ssh user@host sudo "cat > final_location"

Но для этого потребуется аутентификация без пароля (может быть преодолена с помощью ControlMaster) и sudo пароля (NOPASSWD или аутентификация с использованием pam_ssh_agent_auth - я рекомендую попробовать эту, если вы знакомы с ssh-agent).

Вы также можете временно разрешить вход пользователя root (с открытым ключом - есть опция PermitRootLogin without-password , которая делает именно то, что вам нужно), а затем вы можете просто использовать метод scp .

В противном случае я не думаю, что есть какой-либо другой разумный способ, кроме метода Copy Paste.

1

Это сделает то, что вы хотите. Обратите внимание на параметр -t, который передается в ssh. Это назначает TTY, чтобы приглашение sudo password работало правильно.

TEXT=`cat ~/.ssh/id_dsa.pub` ssh user@host -t sudo "bash -c \"echo '$TEXT' > foo.pub\""

Это работает до тех пор, пока во входных данных нет одинарных кавычек. Если есть, вы можете использовать base64 для кодирования / декодирования данных во время передачи.

TEXT=`base64 ~/.ssh/id_dsa.pub` ssh user@host -t sudo "bash -c \"echo '$TEXT' | base64 -d > foo.pub\""

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .