Nasıl sshfs üzerinden sudo?


35

Yerel ana bilgisayarımda sshfs aracılığıyla şu şekilde barındırılacak şekilde eşlenen alphabir dizin foovar bravo:

$ sshfs charlie@bravo:/home/charlie ~/foo

Ancak, ana bilgisayarda bravo, sudo /bin/suçalışabilmem için istediğim başka bir kullanıcı var bravo:/home/delta. deltassh ile giriş yapamazsınız; değiştiremediğim nedenlerden dolayı, yalnızca makineye girdikten sonra deltaya geçebilirsiniz.

Normalde ssh'a bravo, sonra da deltaya sudo yapardım, ama charlie'nin evini ssh ile monte ettiğimde bunu yapabilmemin bir yolu olup olmadığını merak ediyorum.


2
Bu en iyi dosya izinleriyle çözülebilir.
artifex,

Yanıtlar:


36

Bu, bağlandığınız sunucunun işletim sistemine bağlı olarak değişecektir. CentOS 5 için sshfs mount seçeneklerine eklersiniz:

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

Ubuntu 9.10 için (bence 9,04 olabilir, ancak her ikisi için de aynı olabilir) veya Debian'ı ekleyeceksiniz:

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

OpenSSH run çalıştıran diğer sistemler için doğru yolu bulmak için

sudo grep Subsystem /etc/ssh/sshd_config

ve sftp sunucusu ikili dosyasının konumunu bulun.

Sen NOPASS ile kurulum sudo gerekebilir: ya prevalidate {sftp sunucu yolunu} ile ssh user@host sudo -vböylece sudobir güncellenmiş zaman damgası vardır notty. Benim durumumda iki komutum:

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"

1
Teşekkürler, bu çok düzgün bir hiledir. Durumum için sudoya "-u <some_other_user>" daha yeni ekledim
jor

1
Çok iyi, kusursuz çalıştı. Tek noktam, örnekte gereksiz görünen iki kez / usr / bin / sudo olması.
xaralis 08

1
@Craisis Eski postayı getirdiğim için üzgünüm, ancak basit bir kullanıcı olan bir CentOS 6.5 sunucusuna ssh kurmak istiyorum, ancak yalnızca root erişimi olan bir klasör ekleyin. Bu doğru olur sshfs basicuser@remotehost:remote_path local_mount_path -o sftp_server="/usr/bin/sudo -u root /usr/libexec/openssh/sftp-server"mu?
Don Rhummy,

1
ssh host sudo -vsudo'umu mutlu etmiyor - sudo vermeme izin vermeden önce bir tty istiyor. Düşünceler?
w00t

1
@eggo @Sebi @calandoa @xaralis debian 9'da root olarak sudo yapmak istersem bu komut da çalışır mı? Çünkü kullanırsam: 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"işe yaramazsa: \ - sadece "uzak ana bilgisayarların bağlantısı kesildi" diyor
user3450548 18

3

Diğer kullanıcı dosyalarına (hatta root) erişmek için bindfs + sshfs kullanabilirsiniz.

Öncelikle 'root'unuzu veya kullanıcı altındaki herhangi bir dizini remided uid ile bağlarsınız.

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

ve sonra sadece dizine sshfs.

sshfs USER@SERVER:tmproot TARGET

Ancak güvenlik için tüm kökü eşleştirmek /değil, yalnızca ihtiyacınız olan kısmını eşleştirmek daha iyidir . Örneğin: Bu yöntemi, başka bir kullanıcı dizini bilgisayarınıza, örneğin / var / www 'dan / / www' ye kopyalayıp kök dizini kullanıcınıza remap etmek için kullanabilirsiniz, böylece tam erişime sahip olursunuz.

Kullanıcı kimliğini korumak için erişime ihtiyacınız varsa veya birden fazla kullanıcıya erişiminiz varsa, o zaman yeni bir kullanıcı oluşturacağım; örneğin "0" ve / bin / false ile "rootfs" ve normal bir sshfs yaparım.


0

Deneyebilirsiniz (ancak işe yarayacağını sanmıyorum):

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

Sshfs'i çok iyi anlamıyorum, bu yüzden işe yarayacak böyle bir şey elde edebilirsiniz, ama nasıl olacağını söyleyemedim ve biraz şaşırırdım.

Başka bir olasılık da 'sudo / bin / su bravo' komutunu ~ / .ssh / rc 'ye koymaktır, ancak bu fs montajlarınızın tümünü (çalıştığını varsayarak, şüpheliyim) ve normal ssh kullanımınızı etkileyecektir. .

Memnuniyet düşürücü olduğum için üzgünüm.


0

Tümdengelimle, basit bir komutla bunu başarmanın imkansız olduğunu düşünüyorum .

Bunun nedeni, sshfs'nin herhangi bir komutu geçmeden ssh'yi çağırmasıdır, ancak bunun yerine, SSH'nin bir alt sistemi olan SFTP'yi kullanır.

Gönderen sshfs man:

Uzak bilgisayarda, SSH'nin SFTP alt sistemi kullanılır.

Ayrıca , mevcut kullanıcının değiştirilmesi (veya 'su' veya 'sudo') SFTP protokolünün bir parçası değildir, ancak bu çok sık istenen bir özellik gibi görünmektedir.


bu imkansız değil. Craisis'in çözümü işe yarıyor.
Jayen

Tabii ki evet, çünkü alt sistemi başlatan emirleri geçersiz kılar ve sudo ekler. İyi bulma ancak sudo'yu parola olmadan (veya bir zaman damgası kullanarak) kurmanız gerekir; bu da güvenliği azaltabilir. fakat OP gerçekten bunu yapmak istediğinden beri tartışmayacağım.
Weboide,

0

Muhtemelen, en iyi yol, @artifex'in önerdiği gibi dosya izinleridir.

@Weboide'in dediği gibi, sshfs aracılığıyla mümkün değil.

Ama diyelim, basit bir komut dosyası oluşturmak sanırım sudosshsizin benimsediğiniz edeceğini $PWD, dönüştürmek /home/delta/ve içinden komutunu çalıştırın sshve sudouzak makinede.

Bunun gibi bir şey:

#!/usr/bin/env bash

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

Ondan sonra sudossh commandgöreceli yolları kullanıp çalıştırabilir ve hatırlayabilirsiniz.

Eğer ssh-agent kullanıyorsanız, sadece sudoşifrenizi girmeniz gerekir .


0

Benim çözüm cringingly çirkin (kaçan dize birkaç katmanları sayesinde) ama yolunu okuyacak sftp-servergelen /etc/ssh/sshd_configve onu içinden yürütmek sudo. Peki ya sshd_configaltında değilse /etc/ssh? Belki ve sshile ikili içinde arama ?stringsgrep

#!/bin/sh
sshfs -o sftp_server="/bin/sh -c \"sudo \`sed -n '/Subsystem\\\\\\\\s\\\\+sftp\\\\\\\\s\\\\+/{s///;p}' /etc/ssh/sshd_config\`\"" "$@"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.