Как делают меня sudo по sshfs?

Выполнение в параллельных данных рисков, изменяющихся между тем, когда Вы сделали копию и обновление копии соответственно. Обновление приложений для указания на новое имя хоста может вызвать горе также.

Я рекомендовал бы использовать параллельную установку для тестирования каждого приложения, но однажды удовлетворенный тестированием я буду, вероятно, использовать Отсоединение/Присоединение: Как переместить базы данных SQL Server в новое местоположение при помощи Отсоединения, и Присоединение функционирует в SQL Server

35
задан 8 July 2010 в 01:27
6 ответов

Это будет варьироваться в зависимости от ОС сервера, с которым Вы соединяетесь. Для centOS 5 Вы добавили бы к sshfs, монтируют опции:

-o sftp_server="/usr/bin/sudo /usr/libexec/openssh/sftp-server"

Для Ubuntu 9.10 (я думаю, мог бы быть 9.04, но это - вероятно, то же для обоих), или Debian, который Вы добавили бы:

-o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server".

Найти корректный путь для других систем, работающих openSSH выполненным

sudo grep Subsystem /etc/ssh/sshd_config

и ищите местоположение двоичного файла sftp-сервера.

Вы, возможно, должны были бы установить sudo с NOPASS: {путь к sftp-серверу} или предварительно проверить с ssh user@host sudo -v так, чтобы sudo имеет обновленную метку времени для notty. В моем случае мои две команды были:

ssh login_user@host sudo -v
sshfs login_user@host:remote_path local_path -o sftp_server="/usr/bin/sudo -u as_user /usr/lib/ssh/sftp-server"
36
ответ дан 28 November 2019 в 19:52
  • 1
    Спасибо, это - очень аккуратный 'прием'. Я просто добавил "-u <some_other_user>" к sudo для моей ситуации –  jor 17 November 2010 в 11:12

Вы могли бы попробовать (но я не думаю, что это будет работать):

sshfs -o ssh_command='ssh sudo /bin/su bravo' charlie@bravo:/home/charlie ~/foo

Я не понимаю sshfs очень хорошо, таким образом, Вы смогли заставлять что-то как этот работать, но я не мог сказать, как, и я буду немного удивлен.

Другая возможность состоит в том, чтобы поместить команду 'sudo/bin/su браво' в ~/.ssh/rc, но это влияло бы на все Ваши опоры фс (предполагающий, что это работало, относительно которого я также сомневаюсь), а также Ваша нормальная эксплуатация ssh.

Извините за то, чтобы быть debbie занудой.

0
ответ дан 28 November 2019 в 19:52

Вычетом я думаю, что этого невозможно достигнуть в простой команде.

Это вызвано тем, что sshfs называет ssh, не передавая команды, но, вместо этого, использует SFTP, который является подсистемой SSH.

Из sshfs страницы справочника:

На удаленном компьютере используется подсистема SFTP SSH.

Плюс, изменяя текущего пользователя (или 'su' или 'sudo') не часть протокола SFTP, хотя это походит на очень часто требуемую функцию.

0
ответ дан 28 November 2019 в 19:52

Вероятно, лучший способ через полномочия файла, как @artifex предполагает.

Как @Weboide говорит, это невозможно через sshfs.

Но я предполагаю, что Вы могли создать простой сценарий, давайте назовем его sudossh это возьмет Ваш $PWD, преобразуйте его в /home/delta/ и прокрученный команда ssh и sudo на удаленной машине.

Что-то вроде этого:

#!/usr/bin/env bash

ssh -t charlie@bravo "cd `pwd | sed 's/user\/foo/delta/'`; sudo -u delta $*"

После этого можно выполниться sudossh command и не забудьте использовать относительные пути.

При использовании ssh-агента просто необходимо ввести Ваш sudo пароль.

0
ответ дан 28 November 2019 в 19:52

Вы можете использовать bindfs + sshfs для доступа к другим пользовательским файлам (даже root).

Сначала вы монтируете ваш 'root' или любую другую директорию под вашим пользователем с помощью remapped uid.

ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"

а затем просто sshfs в каталог.

sshfs USER@SERVER:tmproot TARGET

Но для безопасности лучше не монтировать весь корневой каталог / а только ту часть, которая вам нужна. Например: Вы можете использовать этот метод для монтирования любого другого пользовательского каталога к вашему, например, файлы из /var/www в ~/www и возврата корня к вашему пользователю, чтобы у вас был полный доступ к нему.

Если вам нужен доступ для сохранения uid или доступа к нескольким пользователям, то я создам нового пользователя, например, "rootfs" с uid=0 и /bin/false и сделаю обычный sshfs.

.
3
ответ дан 28 November 2019 в 19:52

Мое решение ужасно некрасиво (благодаря нескольким уровням экранирования строк), но оно будет читать путь к sftp-серверу из / etc / ssh / sshd_config и выполните его через sudo . Что теперь, если sshd_config не находится в / etc / ssh ? Может быть, выполнить поиск внутри двоичного файла ssh с строками и grep ?

#!/bin/sh
sshfs -o sftp_server="/bin/sh -c \"sudo \`sed -n '/Subsystem\\\\\\\\s\\\\+sftp\\\\\\\\s\\\\+/{s///;p}' /etc/ssh/sshd_config\`\"" "$@"
0
ответ дан 28 November 2019 в 19:52

Теги

Похожие вопросы