Auf meinem lokalen Host habe alpha
ich ein Verzeichnis foo
, das über sshfs dem Host bravo
wie folgt zugeordnet ist:
$ sshfs charlie@bravo:/home/charlie ~/foo
Doch auf dem Host bravo
ist es ein anderer Benutzer, Delta, das möchte ich sudo /bin/su
als, so dass ich die Arbeit in tun kann bravo:/home/delta
. delta
darf nicht über ssh eingeloggt sein; Aus Gründen, die ich nicht ändern kann, können Sie nur dann zu Delta wechseln, wenn Sie auf dem Computer sind.
Normalerweise würde ich in ssh bravo
, dann in sudo in delta, aber ich frage mich, ob ich das auf irgendeine Weise tun kann, wenn ich Charlie's Heimverzeichnis über ssh habe.
Antworten:
Dies hängt vom Betriebssystem des Servers ab, zu dem Sie eine Verbindung herstellen. Für centOS 5 würden Sie zu den Mount-Optionen von sshfs hinzufügen:
-o sftp_server="/usr/bin/sudo /usr/libexec/openssh/sftp-server"
Für Ubuntu 9.10 (ich denke, es könnte 9.04 sein, aber es ist wahrscheinlich für beide dasselbe) oder Debian würden Sie hinzufügen:
-o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server"
.Um den richtigen Pfad für andere Systeme zu finden, auf denen openSSH ausgeführt wird, führen Sie Folgendes aus
sudo grep Subsystem /etc/ssh/sshd_config
und suchen Sie nach dem Speicherort der SFTP-Server-Binärdatei.
Möglicherweise müssen Sie sudo mit NOPASS einrichten: {Pfad zum SFTP-Server} oder mit vorab validieren,
ssh user@host sudo -v
damitsudo
ein aktualisierter Zeitstempel für angezeigt wirdnotty
. In meinem Fall waren meine zwei Befehle:quelle
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
macht mein sudo nicht glücklich - es will ein tty, bevor es mich sudo lässt. Gedanken?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"
es funktioniert nicht: \ - es heißt nur "Remote-Hosts hat getrennt"Sie können bindfs + sshfs verwenden, um auf andere Benutzerdateien (sogar root) zuzugreifen.
Zuerst mounten Sie Ihr 'root' oder ein anderes Verzeichnis unter Ihrem Benutzer mit der neu zugewiesenen UID.
ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"
und dann einfach sshfs ins verzeichnis.
sshfs USER@SERVER:tmproot TARGET
Aus Sicherheitsgründen ist es jedoch besser, nicht die gesamte Root abzubilden,
/
sondern nur einen Teil, den Sie benötigen. Beispiel: Sie können diese Methode verwenden, um ein beliebiges anderes Benutzerverzeichnis in Ihre zu mounten, z. B. Dateien aus / var / www in ~ / www, und das Stammverzeichnis Ihrem Benutzer neu zuzuordnen, sodass Sie vollen Zugriff darauf haben.Wenn Sie Zugriff benötigen, um UID beizubehalten oder Zugriff auf mehrere Benutzer zu haben, dann würde ich einen neuen Benutzer zum Beispiel "rootfs" mit UID = 0 und / bin / false erstellen und ein normales sshfs ausführen.
quelle
Sie könnten es versuchen (aber ich glaube nicht, dass es funktionieren wird):
Ich verstehe sshfs nicht sehr gut, so dass Sie möglicherweise in der Lage sind, so etwas zum Laufen zu bringen, aber ich konnte nicht sagen, wie und ich wäre ein wenig überrascht.
Eine andere Möglichkeit besteht darin, das Kommando 'sudo / bin / su bravo' in ~ / .ssh / rc zu setzen, aber das würde sich auf alle Ihre fs-Mountings auswirken (vorausgesetzt, es hat funktioniert, was ich auch bezweifle) sowie auf Ihre normale Verwendung von ssh .
Tut mir leid, dass ich ein Schwächling bin.
quelle
Ich halte es für unmöglich , dies mit einem einfachen Befehl zu erreichen.
Dies liegt daran, dass sshfs ssh aufruft, ohne einen Befehl zu übergeben, sondern stattdessen SFTP verwendet, ein Subsystem von SSH.
Aus der sshfs- Manpage:
Außerdem gehört das Ändern des aktuellen Benutzers (oder 'su' oder 'sudo') nicht zum SFTP-Protokoll, obwohl dies eine sehr häufig angeforderte Funktion zu sein scheint.
quelle
Wahrscheinlich ist der beste Weg, durch Dateiberechtigungen, wie @artifex vorschlägt.
Wie @Weboide sagt, ist dies mit sshfs nicht möglich.
Aber ich denke , man könnte ein einfaches Skript erstellen, nennen wir es ,
sudossh
dass Ihr dauern wird$PWD
, wandelt es in/home/delta/
und den Befehl durchlaufenssh
undsudo
auf dem entfernten Rechner.Etwas wie das:
Danach können Sie ausführen
sudossh command
und sich daran erinnern, relative Pfade zu verwenden.Wenn Sie ssh-agent verwenden, müssen Sie nur Ihr
sudo
Passwort eingeben.quelle
Meine Lösung ist erschreckend hässlich (dank ein paar Schichten von Strings), aber sie liest den Pfad
sftp-server
von/etc/ssh/sshd_config
und führt ihn durchsudo
. Wassshd_config
ist nun, wenn sich nicht darunter befindet/etc/ssh
? Vielleicht suche ich inssh
binär mitstrings
undgrep
?quelle