Смена пользователя во время scp


16

Мне нужно скопировать файл между машинами Linux. Проблема, которую пользователь использует для входа в систему ( myuser), отличается от пользователя, который может получить доступ к файлу.

Если я просто sshна машине, я могу переключить пользователя с помощью sudo su someuser, могу ли я сделать это как-нибудь, пока scp?

При использовании WinSCP мне удалось это сделать, настроив SCP / Shell, поэтому я считаю, что должен быть похожий способ сделать это с помощью чистой оболочки.


Я не совсем понимаю. Почему бы вам не войти в систему как пользователь, который манипулирует файлом?
Рахму

Потому что невозможно войти, используя другого пользователя.
Tarlog

Как насчет подключения sshи выполнения scp, что-то вроде этого ssh myuser@host "sudo scp ...":?
Рахму

Может быть, ответ здесь может работать в такой ситуации? unix.stackexchange.com/questions/43094/… @Tarlog Предполагается, что на самой удаленной машине вы можете использовать ssh someuser @ remote
Бернхард

Ответы:


9

Предполагая, что пользователю, которому вы можете использовать ssh, не нужен пароль для sudo su для целевого пользователя, вы можете попробовать это:

dd if=myfile | ssh some.host "sudo -u targetuser dd of=myfile" 

... Имейте в виду, я все еще не убежден, что простая настройка targetuserдля разрешения только scp / sftp / rsync через SSH и использование пары ключей RSA для аутентификации не намного лучший вариант.


1
или tar -cvf - * | ssh user@host "sudo -u targetuser tar -C /targetdir -xf -"за кучу файлов
Мэтт

Также верно, и я полагаю , мы можем спорить о том -zили -jполезны в зависимости от скорости подключения и компьютерной техники с обеих сторон ...
Shadur

3

Если вы знаете учетные данные другого пользователя ( someuser), вы можете просто указать его при scpвызове.

Со man scpстраницы:

Имена файлов могут содержать спецификацию пользователя и хоста, чтобы указать, что файл должен быть скопирован на / с этого хоста. Локальные имена файлов можно сделать явными, используя абсолютные или относительные имена путей, чтобы избежать scp-обработки имен файлов, содержащих «:» в качестве спецификаторов хоста. Копии между двумя удаленными хостами также разрешены.

Вот используемый синтаксис:

[[user@]host:]/path/to/file

пример

Вы хотите скопировать файл /home/foo/barс host1вашего локального хоста, используя пользователя someuser, вот команда:

scp someuser@host1:/home/foo/bar .

Вам будет предложено для аутентификации (пароль, ключи, ...).


1
Невозможно войти как другой пользователь.
Tarlog

Затем установите вход только для scp / rsync с ключами RSA.
Шадур

1
Невозможно использовать другого пользователя, используя любой логин. Кроме того, я уже использую ключи RSA для SSH / SCP.
Tarlog

1

Возможно, это возможно , но я бы сказал, что это очень неловкий путь.

Мое первое предложение - войти в систему под этим пользователем. Даже если у вас нет пароля этого пользователя, вы можете добавить свой собственный открытый ключ ssh к его авторизованным ключам и затем запустить scp, используя их ключ, как показывает rahmu.

Если это невозможно, мое второе предложение состоит в том, чтобы войти в систему с помощью ssh, sudo для пользователя и создать tar-файл из файлов, которые вы хотите скопировать, и поместить его куда-нибудь, чтобы ваш собственный пользователь мог прочитать. Затем найдите этот tarfile.


Невозможно войти в систему другого пользователя. Да, я сам разобрался со вторым предложением. Ищете легкий путь :)
Tarlog

Ссылка, размещенная gcb, должна быть полезной. По крайней мере, если вы собираетесь делать это более одного раза. Или, конечно, вы можете изменить права доступа к файлу, чтобы предоставить к нему доступ своего собственного пользователя.
Дженни Д

Ну, я пытаюсь создать скрипт (который будет использоваться несколько раз), который будет использоваться разными пользователями. Так что предоставление мне доступа не очень поможет. Любой, кто может «sudo su otheruser», должен иметь возможность запустить скрипт.
Tarlog

Попался. Я бы начал со ссылки из gcb, затем, если у вас возникнут проблемы со скриптом, опубликуйте его и посмотрите, сможем ли мы краудсорсировать какую-то помощь.
Дженни Д


0

Я попытался привести несколько примеров в следующей статье. Основная идея - не использовать scp, а использовать dd и ssh с переключателем пользователя sudo. Посмотрите:

http://hmmss.wordpress.com/2014/07/02/ssh-and-scp-with-another-user


1
Было бы лучше предоставить больше подробностей здесь, если ссылка становится недействительной, ваш ответ имеет мало значения.
Энтон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.