На моем локальном хосте у alpha
меня есть каталог, foo
который отображается через sshfs на хост bravo
:
$ sshfs charlie@bravo:/home/charlie ~/foo
Однако на хосте bravo
есть еще один пользователь, delta, с которым я хочу sudo /bin/su
работать, чтобы я мог выполнять работу bravo:/home/delta
. delta
не может войти в систему через ssh; по причинам, которые я не могу изменить, вы можете перейти в delta только после того, как окажетесь на машине.
Обычно я в ssh bravo
, затем sudo в delta, но мне интересно, есть ли способ сделать это, когда я установил домашний каталог Чарли через ssh.
Ответы:
Это зависит от ОС сервера, к которому вы подключаетесь. Для 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
. В моем случае две мои команды были:источник
sshfs basicuser@remotehost:remote_path local_mount_path -o sftp_server="/usr/bin/sudo -u root /usr/libexec/openssh/sftp-server"
?ssh host sudo -v
не делает мое sudo счастливым - он хочет tty, прежде чем это позволит мне sudo. Мысли?ssh -t myuser@host sudo -v sshfs myuser@host:remote_path local_path -o sftp_server="/usr/bin/sudo -u root /usr/lib/openssh/sftp-server"
он не работает: \ - он просто говорит "удаленные хосты отключены"Вы можете использовать bindfs + sshfs для доступа к другим пользовательским файлам (даже root).
Сначала вы монтируете свой «root» или любой другой каталог под вашим пользователем с переназначенным uid.
ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"
а затем просто sshfs в каталог.
sshfs USER@SERVER:tmproot TARGET
Но для безопасности лучше не отображать весь корень,
/
а только ту его часть, которая вам нужна. Например: Вы можете использовать этот метод для монтирования любого другого пользовательского каталога в ваш, например, файлы из / var / www в ~ / www и переназначить root для вашего пользователя, чтобы у вас был полный доступ к нему.Если вам нужен доступ, чтобы сохранить uid или иметь доступ к нескольким пользователям, я бы создал нового пользователя, например, «rootfs» с uid = 0 и / bin / false, и сделал бы обычный sshfs.
источник
Вы можете попробовать (но я не думаю, что это сработает):
Я не очень хорошо понимаю sshfs, так что вы могли бы заставить что-то подобное работать, но я не мог сказать как, и я был бы немного удивлен.
Другая возможность - поместить команду 'sudo / bin / su bravo' в ~ / .ssh / rc, но это повлияет на все ваши монтирования fs (если это работает, что я тоже сомневаюсь), а также на ваше обычное использование ssh ,
Извините за то, что был дебютером.
источник
С помощью дедукции я думаю, что это невозможно достичь с помощью простой команды.
Это потому, что sshfs вызывает ssh без передачи каких-либо команд, а вместо этого использует SFTP, который является подсистемой SSH.
Из справочной страницы sshfs :
Кроме того , изменение текущего пользователя (или «su», или «sudo») не является частью протокола SFTP, хотя это кажется очень часто запрашиваемой функцией.
источник
Вероятно, лучший способ - через права доступа к файлам, как предлагает @artifex.
Как говорит @Weboide, это невозможно через sshfs.
Но я думаю, вы могли бы создать простой сценарий, давайте назовем его
sudossh
, который возьмет ваш$PWD
, преобразует его/home/delta/
и запускает команду черезssh
иsudo
на удаленной машине.Что-то вроде этого:
После этого вы можете выполнить
sudossh command
и не забудьте использовать относительные пути.Если вы используете ssh-agent, вам просто нужно ввести
sudo
пароль.источник
Мое решение подобострастно уродливые (благодаря нескольким слоям строки отводящей), но он будет читать путь
sftp-server
от/etc/ssh/sshd_config
и выполнить его с помощьюsudo
. Что теперь, еслиsshd_config
не находится под/etc/ssh
? Может быть, искать внутриssh
двоичного файла сstrings
иgrep
?источник