0

私のpythonスクリプトを修正するのを手伝ってくれませんか。次のスクリプトは、python pexpect モジュールを使用して、ターゲット ホストに対して scp を実行しています。Permission denied 例外が発生した場合は、パスワードのリストを含むローカル配列変数で処理し、scp を続行します。

local_pass = ["test123","welcome1","Welcome1"]

def file_copy(user,host,password,logfile,local_file):
    print "Connecting to %s as %s" % (host,user)
    local_file_copy = local_file
    remote_file = os.path.basename(local_file)
    print "Performing scp %s %s@%s:/tmp/%s" % (local_file,user,host,remote_file)
    p=pexpect.spawn("scp %s %s@%s:/tmp/%s" % (local_file,user,host,remote_file))
    p.timeout=10
    i=p.expect([ssh_newkey,'assword:'],p.timeout)
    print "setting log file %s" % (logfile)
    fout=file(logfile,'w')
    p.logfile=fout
    counter=0

    if i == 0:
        print "yes to continue connecting"
        p.sendline("yes");
        i=p.expect([ssh_newkey,'assword:'],p.timeout)

    if i == 1:
            try:
                    print "entering ssh password %s" % (password)
                    output=p.sendline(password)
                    sys.exit(1)
            except:
                    while(counter < 3):
                            print "Permission Denied...\n"
                            #p.expect(['Permission denied, please try again.\r\n'],p.timeout)
                            p.expect(['assword:'],p.timeout)
                            p.sendline("%s" %(local_pass[counter]))
                            print "Attempting to relogin....\n"
                            print "LOCALPASSWORD : --> %s\n" %(local_pass[counter])
                            counter+=1;
                            j=p.expect("]","#","$")
                            if j in range(4):
                                    break;

    print "returning expect handle"
    p.expect(pexpect.EOF)
    print "Script file has been copied to target host"

ありがとう、

4

1 に答える 1

1

さて、あなたのコードはかなり複雑で判読できないように見えます.なぜ、すでに解決済みの問題を解決しているのですか?

openssh-wrapperモジュールを ssh キーと組み合わせて使用​​することをお勧めします。これにより、生活が楽になります。

コードは次のようになります。

from openssh_wrapper import SSHConnection

def upload(local_file, remote_file):

    conn = SSHConnection('your-server.com', login='username', port=22, identity_file='~/.ssh/id_rsa')

    response = conn.scp(local_file, target='/tmp/', mode='0655', owner='username')
    print response

毎回パスワードを入力したい場合は、ssh キーの部分をそのままにしておくこともできます。このコードはテストされていませんが、とにかく動作するはずです..

于 2013-08-13T13:07:05.013 に答える