2011-12-21 5 views

答えて

0

user1としてscpを実行するのは簡単ではないでしょうか?その場合、ファイルをuser2にchownしますか? user2にしかアクセスできない場所に格納する必要がある場合は、user2にsuして移動することができます。

+0

ヘルプなし。ファイルの所有権を変更することはできません。 – user1109632

0

あなたがhostC(クライアント)にいて、userX @ hostAからuserY @ hostBにファイルをコピーしたいとします。

あなたはHOSTCにscpコマンドを発行できます。

scp [email protected]:file-to-copy [email protected]:destination-folder/ 

ただし、認証する必要があります。 userX @ hostAのためにssh鍵を設定した場合、鍵認証は正常に動作します。

scpは、エージェント転送またはクリア転送キーを無効にするオプションを使用してsshを呼び出します。したがって、userY @ hostBのキーを持っていても、hostBでは使用できず、パスワードを要求されます。

-S <ssh-command>scphostCに呼び出し、エージェント転送を妨げるオプションを取り除くためのラッパースクリプトを使用して、おそらく明示的に有効にする必要があります。

scpを呼び出す

ssh-wrapper.py

#!/usr/bin/python 

import sys, os 

def is_exe(fpath): 
    return os.path.exists(fpath) and os.access(fpath, os.X_OK) 

def which(program): 
    fpath, fname = os.path.split(program) 
    if fpath: 
    if is_exe(program): 
     return program 
    else: 
    for path in os.environ["PATH"].split(os.pathsep): 
     exe_file = os.path.join(path, program) 
     if is_exe(exe_file): 
     return exe_file 
    return None 

if __name__ == '__main__': 
    ssh = which('ssh') 
    assert ssh is not None 
    args = [ssh] + sys.argv[1:] 
    for x in ('-a','-oClearAllForwardings yes'): 
    if x in args: 
     args.remove(x) 
    if '-oForwardAgent yes' not in args: 
    args.insert(1,'-oForwardAgent yes') 
    os.execl(ssh,*args) 

これまで
scp -S ssh-wrapper.py [email protected]:file-to-copy [email protected]:destination-folder/ 
+0

'scp'は明示的にこれを行えないので、疑わしいセキュリティだと思います。あなたはあなたの資格を乱用しないように 'userA'を完全に信用しなければなりません。 – MattH

+0

あなたの素早い対応のためにマットありがとうございますが、あなたは私の質問をしていないことを願っています。私はHostCサーバーに存在する自分のシェルスクリプトが同じサーバーHostCにログインするが、別のユーザーID(user2)でログインし、そこから別のサーバーHostBからファイルをコピーし、そこにファイルを保持する(サーバーHostC)。ファイルの所有者はuserid(user2)になります。 – user1109632

+0

この場合、 'scp -S ssh-wrapper.py userX @ HostB:ファイルtoコピーuser2 @ HostC:宛先フォルダ/' – MattH