ローカルホストalpha
に、次のようにsshfsを介してホストfoo
にマップされたディレクトリbravo
があります。
$ sshfs charlie@bravo:/home/charlie ~/foo
ただし、ホストbravo
には、別のユーザーdeltaがいますSudo /bin/su
として、私がbravo:/home/delta
。 delta
はssh経由でログインできない場合があります。私が変更できない理由のために、あなたはあなたがマシンにいるときだけあなたはデルタにSudoをすることができます。
通常、私はbravo
にsshし、次にsudoでdeltaに入れますが、sshを介してチャーリーのホームディレクトリをマウントしたときに、それを行う方法があるかどうか疑問に思っています。
これは、接続しているサーバーのOSによって異なります。 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-serverバイナリの場所を探します。
NOPASS:{path to sftp-server}でSudoをセットアップするか、Sudo
がnotty
のタイムスタンプを更新できるように、ssh user@Host Sudo -v
で事前検証する必要がある場合があります。私の場合、2つのコマンドは次のとおりです。
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"
Bindfs + sshfsを使用して、他のユーザーファイル(ルートも含む)にアクセスできます。
最初に、「ルート」または再マッピングされたuidを使用してユーザーの下にある他のディレクトリをマウントします。
ssh -t USER@SERVER "mkdir ~/tmproot; Sudo bindfs --map=root/USER / ~/tmproot"
そして、単にディレクトリにsshfsします。
sshfs USER@SERVER:tmproot TARGET
ただし、セキュリティ上の理由から、ルート全体をマップしないほうがよい/
が必要な部分のみ。例:この方法を使用して、他のユーザーディレクトリをマウントできます。たとえば、/ var/wwwから〜/ wwwにファイルをマウントし、rootをユーザーに再マッピングして、フルアクセスできるようにします。
Uidを保持するためにアクセスする必要がある場合、または複数のユーザーにアクセスする必要がある場合は、uid = 0および/ bin/falseを使用して「rootfs」などの新しいユーザーを作成し、通常のsshfsを実行します。
おそらく、@ 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-agentを使用する場合は、Sudo
パスワードを入力するだけです。
私の解決策はcringingly醜いです(文字列のエスケープのいくつかの層のおかげです)、sftp-server
から/etc/ssh/sshd_config
へのパスを読み取り、Sudo
を介して実行します。ここで、sshd_config
が/etc/ssh
の下にない場合はどうなりますか?多分ssh
とstrings
でgrep
バイナリ内を検索しますか?
#!/bin/sh
sshfs -o sftp_server="/bin/sh -c \"Sudo \`sed -n '/Subsystem\\\\\\\\s\\\\+sftp\\\\\\\\s\\\\+/{s///;p}' /etc/ssh/sshd_config\`\"" "$@"
あなたが試すかもしれません(しかし私はそれがうまくいくとは思いません):
sshfs -o ssh_command='ssh Sudo /bin/su bravo' charlie@bravo:/home/charlie ~/foo
私はsshfsをよく理解していないので、あなたはそのようなものを動作させることができるかもしれませんが、私は方法を言うことができなかったので、少し驚いたでしょう。
もう1つの可能性は、コマンド 'Sudo/bin/su bravo'を〜/ .ssh/rcに置くことですが、これは、すべてのfsマウント(機能すると仮定します)に影響し、通常のsshの使用にも影響します。 。
デビーダウナーでごめんなさい。
控除によって、これは単純なコマンドで達成するために不可能だと思います。
sshfsはコマンドを渡さずにsshを呼び出しますが、代わりにSSHのサブシステムであるSFTPを使用します。
sshfsマンページから:
リモートコンピューターでは、SSHのSFTPサブシステムが使用されます。
Plus、現在のユーザー(または「su」または「Sudo」)の変更はSFTPプロトコルの一部ではありませんが、これは非常に頻繁に要求される機能のようです。