Как использовать SSH для копирования файла на удаленный сервер под другим пользователем
У меня есть файл на моем локальном компьютере, который я хочу скопировать на удаленный сервер с помощью программы SSH (не scp, not rsync, а не sftp), локальный файл является закрытым ключом SSL, и я не хочу создавать временные копии на Удаленный сервер во время передачи.
Корневой пользователь на удаленном сервере не может войти через SSH по соображениям безопасности, однако мой удаленный пользователь (с тем же именем пользователя, что и мой локальный пользователь) может внести коренные изменения через команду sudo
после подсказки пароля.
Проблема: как скопировать локальный файл, войти в систему через SSH, переключиться на пользователя root с помощью пароля sudo
а затем записать файл на удаленный сервер в корневой каталог пользователя? И желательно все в одной строке!
- Генерировать ключ RSAv2 в формате OpenSSH в Windows
- Можно ли клонировать корневую файловую систему работающего сервера через ssh?
- Автозапуск туннелей SSH при загрузке (Ubuntu)
- Ошибка ssh «разрешения слишком открыта»
- Rsyncing каталогов через ssh туннель
- Библиотека SSH для Java
- Как перенести файл на мой сервер с помощью PuTTY?
- SSH-туннелирование для обхода брандмауэра (http и socks)
- Как запустить локальное приложение на удаленном сервере с SSH?
- Что означает «Роуминг, не разрешенный сервером» для клиента ssh?
- MacOS продолжает задавать мою кодовую фразу ssh, так как я обновляюсь до Sierra
- Почему запрос «пароль» берется навсегда, когда я использую SSH на своем сервере Ubuntu 9.05?
- Ограничьте каждого пользователя только своей собственной домашней папкой
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\""