Как использовать SSH для копирования файла на удаленный сервер под другим пользователем

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

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

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

cat – ваш друг:

 cat key | ssh [email protected] sudo "cat > final_location" 

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

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

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

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

 TEXT=`cat ~/.ssh/id_dsa.pub` ssh [email protected] -t sudo "bash -c \"echo '$TEXT' > foo.pub\"" 

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

 TEXT=`base64 ~/.ssh/id_dsa.pub` ssh [email protected] -t sudo "bash -c \"echo '$TEXT' | base64 -d > foo.pub\"" 
  • Почему запрос «пароль» берется навсегда, когда я использую SSH на своем сервере Ubuntu 9.05?
  • Tmux и screen-256 TERM не поддерживаются на удаленных хостах
  • Получение ssh для выполнения команды в фоновом режиме на целевой машине
  • Как (S) FTP на скрытый сервер?
  • SSH-соединение под UDP?
  • Как git клонировать частные репозитории в Vagrant VM, используя ключи SSH хоста?
  • Как скопировать файл без использования scp внутри сеанса ssh?
  • Удаленное крепление с туннелем
  • Можно ли добавить шифр для клиента sftp?
  • Добавить статический вход ARP в маршрутизатор Verizon AC1750
  • Предотвращение остановки уже запущенного фонового процесса после закрытия SSH-клиента
  • Interesting Posts

    ObservableCollection vs. List

    C # regex pattern для извлечения URL-адресов из заданной строки – не полный URL-адрес html, но также и ссылки

    Нарушение рекурсии в java

    Как преобразовать TimeSpan в форматированную строку?

    Как выполнить rsync большой файл с минимальными затратами на процессор и пропускную способность?

    рулон соединяется с начальным / конечным окном

    Как показать скрытые папки в Windows 8 из современного пользовательского интерфейса?

    Почему не может быть объявлено дублируемое имя переменной во вложенной локальной области?

    Требуется уточнение для лирических идентификаторов Scala (backticks)

    Как принять файл POST

    Компиляция с помощью g ++ с использованием нескольких ядер

    Есть ли вообще способ показать, насколько сильно экран нажат

    Установите файл IMG в качестве компакт-диска на Mac?

    Множественная среда Java на той же машине Linux

    Проверьте, включены ли локальные уведомления в IOS 8

    Давайте будем гением компьютера.