업데이트: 단계별 솔루션 완료

업데이트: 단계별 솔루션 완료

다른 사람이 비밀번호를 가지고 있는 웹 사이트에 액세스하려면 컬 명령을 실행해야 합니다.

예를 들어 curl --basic --user myfriendsname:friendspassword http://www.updateinfo.com

내 친구의 비밀번호를 보지 않고도 이 스크립트를 시작할 수 있는 방법이 필요합니다.

답변1

에서 man curl:

-u, --user <user:password>
  ...
  If you just give the user name (without entering a colon) curl will prompt
  for a password.
  ...

키보드를 건네주고(또는 screen공유 tmux) 입력하게 하세요.

답변2

확인하셨거나 man curl,컬 FAQ, / 매개변수 curl가 있다는 것을 알게 될 것입니다 :--config-K

컬 매개변수를 읽을 구성 파일을 지정합니다. 구성 파일은 명령줄 매개변수를 작성한 후 실제 명령줄에 작성된 것처럼 사용할 수 있는 텍스트 파일입니다. ...(남자 곱슬)

예를 들어, 비밀번호를 저장하고 해독하는 데 사용할 수 있습니다 gpg. 복호화 매개변수는 -d.

업데이트: 단계별 솔루션 완료

처음에는 완전한 솔루션을 제공하지 않았습니다.물고기를 줘, 때를혼자서 낚시하는 법을 배우세요더 가치있습니다.

하지만 진행 방법을 잘 모르는 것 같으니 다음 단계를 따르세요.Python 3.3에서 HTTP 비밀번호 비밀을 관리하기 위한 빠르고 더러운 스크립트.

스크립트를 다운로드하고(또는 git을 사용하여 저장소를 복제) chmod u+x ./curling-with-secrets.py실행하면 ./curling-with-secrets --help다음이 표시됩니다.

❯ ./curling-with-secrets.py --help
usage: curling-with-secrets.py [-h] [--secretfile [SECRETFILE]] user url

This is curling-with-secrets by Guy Hughes.

positional arguments:
  user                  the username to pass to curl
  url                   the url to pass to curl

optional arguments:
  -h, --help            show this help message and exit
  --secretfile [SECRETFILE]
                        specify an alternative secret file

스크립트는 파일 경로의 솔트 해시를 비밀번호로 사용하여 파일을 암호화함으로써 해당 디렉토리의 secret.enc변수에 의해 제공된 파일을 생성합니다. 이는 높은 수준의 보안을 제공하지 않지만 누구나 비밀번호를 보려면 약간의 노력이 필요하며 비밀번호를 일반 텍스트로 저장하면 OS X를 사용하거나 OS X 내에서 실수로 비밀번호를 보는 것이 매우 쉽습니다. 친구는 암호화 메커니즘과 기능을 변경하여 이를 강화한 다음 사용자 계정에 읽기 권한은 없지만 실행 권한은 있고 다른 사용자 및 그룹이 소유한 위치에 파일을 저장할 수 있습니다. 호스트가 없거나 호스트에 액세스할 수 없습니다.secretfileopensslsha512sumcatquicklooktoken()sudoersroot

일단 생성되면 secretfile스크립트는 curl지정된 사용자 인증과 명령줄에 전달된 URL을 사용하여 실행됩니다. 이러한 옵션은 구성 파일 형식으로 옵션 (구성 파일에서 읽음 )을 STDIN사용하여 전달됩니다 . 다음 요구 사항을 충족하도록 쉽게 확장할 수 있습니다 . :)curl-K -STDINcurlman curl

저는 Python을 그다지 좋아하지 않기 때문에 이 스크립트에 몇 가지 문제가 있을 수 있지만 이것이 여러분에게 좋은 출발점이 될 수 있습니다. 반드시 철저하게 테스트해야 합니다.

스크립트의 전체 소스는 다음과 같습니다.

#!/usr/bin/env python3.3

#  Guy Hughes, 2014
#  GNU General Public License Version 3, 29 June 2007

from sys import stdin
from sys import stdout
import os
import argparse
#from sys import os.environ
#from sys import os.access
#from sys import os.mkdirs
#from sys import os.path
import subprocess
import errno
import getpass

def init():
    global args
    global secretfile
    global secretfiledir
    # parse args
    parser = argparse.ArgumentParser(description='This is curling-with-secrets by Guy Hughes.')
    parser.add_argument('--secretfile',nargs='?',help='specify an alternative secret file',type=str)
    parser.add_argument('user', help='the username to pass to curl',type=str)
    parser.add_argument('url', help='the url to pass to curl',type=str)
    args=parser.parse_args()
    #secretfile=os.path.abspath(os.environ.get('XDG_CONFIG_HOME',os.environ.get('HOME') + "/.config") + "/secretcurl/secret.enc")
    if args.secretfile:
        secretfile = os.path.abspath(args.secretfile)
    else:
        secretfile=os.path.abspath('./secret.enc')
        secretfiledir=os.path.dirname(secretfile)

    if check():
        curl()

def check():
    if os.path.isfile(secretfile) and os.access(secretfile, os.R_OK):
        print("I found secretfile at %s. [OK]" % secretfile)
        return True
    else:
        print("I did not find the secretfile at %s. We'll now create it..." % secretfile)
        return createfile()

def token():
    echop=subprocess.Popen(["echo", secretfile], stdout=subprocess.PIPE)
    shap=subprocess.Popen(['sha512sum'],stdout=subprocess.PIPE,stdin=echop.stdout)
    grepp=subprocess.Popen(['grep', '-Eo','\'^.{40}\''],stdout=subprocess.PIPE,stdin=shap.stdout)
    echop.stdout.close()
    shap.stdout.close()
    result=grepp.communicate()[0]
    return result


def createfile():
    # safety check
    if os.path.isfile(secretfile):
        print("FATAL: secretfile exists at %s" % secretfile)
        print("Stopping, to prevent secretfile from being overriden.")
        print("If you wish to overwrite the secretfile, first delete it yourself this run this command again.")
        exit(1)

    print("Creating the secretfile at %s" % secretfile)
    print("Remember: Once the secret file is created, this script"
          " will only be able to decrypt while it is in the same directory and filename."
          "If you ever wish to rename the secretfile, you'd need to modify this script "
          "or recreate the secretfile using this script.")

    print("Checking for directory %s" % secretfiledir)
    if not os.path.exists(secretfiledir):
        sys.stdout.write("Making directories...")
        os.makedirs(secretfiledir, exist_ok=True)
    else:
        print("Parent directories are OK")

    print("Please enter the secret password to be passed to curl:")
    password=getpass.getpass()
    thetoken = token()
    echop=subprocess.Popen(['echo',password],stdout=subprocess.PIPE)
    opensslp=subprocess.Popen(['openssl', 'enc', '-aes-256-cbc',
                     '-salt', '-a',
                     '-k', thetoken,
                     '-out', secretfile
                     ], stdin=echop.stdout)
    echop.stdout.close()

    del password
    del thetoken

    print("Createfile done.")
    return True

def curl():
    print("Decrypting the password...")
    thetoken=token()
    opensslp=subprocess.Popen(['openssl','enc','-aes-256-cbc','-d', '-a','-k',thetoken,
                                      '-in', secretfile],stdout=subprocess.PIPE)
    password=opensslp.communicate()[0].decode('utf-8')
    print(args)
    print(args.url)
    print(password)
    curlconfig="user = " + args.user + "\:" + password  + "\nurl = " + args.url
    curlp=subprocess.Popen(['curl','--basic', '-K', '-'],
                          stdin=subprocess.PIPE,stderr=subprocess.STDOUT,shell=False)
    result=curlp.communicate(input=bytes(curlconfig, 'UTF-8'))
    print(result)



    del password



init()

관련 정보