ใช้ cURL ด้วยชื่อผู้ใช้และรหัสผ่าน?


466

ฉันต้องการเข้าถึง URL ที่ต้องใช้ชื่อผู้ใช้ / รหัสผ่าน ฉันต้องการลองเข้าใช้ด้วย curl ตอนนี้ฉันกำลังทำสิ่งที่ชอบ:

curl http://api.somesite.com/test/blah?something=123

ฉันได้รับข้อผิดพลาด ฉันเดาว่าฉันต้องระบุชื่อผู้ใช้และรหัสผ่านพร้อมกับคำสั่งด้านบน

ฉันจะทำสิ่งนั้นได้อย่างไร

คำตอบ:


693

ใช้การ-uตั้งค่าสถานะเพื่อรวมชื่อผู้ใช้และ curl จะถามรหัสผ่าน:

curl -u username http://example.com

คุณสามารถรวมรหัสผ่านในคำสั่งได้ แต่จากนั้นรหัสผ่านของคุณจะปรากฏในประวัติทุบตี:

curl -u username:password http://example.com

109
โปรดทราบว่าหากคุณทำเช่นนี้จากคอนโซลรหัสผ่านจะยังคงอยู่ในประวัติซึ่งเป็น ... ผิด คุณควรระบุผู้ใช้เพียงคนเดียวและ CURL จะขอรหัสผ่านในโหมด no-echo
Cristian Vrabie

25
@CristianVrabie ถูกต้องทางเทคนิค แต่ไม่ถูกต้องหากคุณเรียกใช้จากสคริปต์อัตโนมัติที่ไม่อนุญาตให้มีข้อความแจ้ง จะอยากรู้อยากเห็นเกี่ยวกับการแก้ไขปัญหานั้น
Ligemer

26
@OmarOthman หากคุณใช้ curl จากสคริปต์ข้อมูลประจำตัว (ชัด) จะไม่จบลงในประวัติของคุณ แต่พวกเขาจะปรากฏใน ps (1) การแก้ไข:print -- '-u username:password' > somewhere && curl -K somewhere http://...
ใครบางคน

7
ตัวแปร @Jay Environment จะได้รับการประเมินก่อนดำเนินการคำสั่ง รหัสผ่านจะยังคงปรากฏในเอาต์พุต ps
Robert Važan

8
ไม่เชื่อต่อประเด็นนี้ แต่ฉันเชื่อว่าคำตอบของฉัน ( stackoverflow.com/a/27894407/758174เช่นใช้--netrc-file) มีความปลอดภัยมากขึ้น มันทำให้รหัสผ่านออกจากประวัติศาสตร์, PS, สคริปต์ของคุณ ฯลฯ curlนั่นเป็นเพียงรูปแบบที่ผมใช้ในสคริปต์ของฉันทั้งหมดและสำหรับประเพณีรับรองความถูกต้องทั้งหมด
Pierre D

253

ปลอดภัยกว่าที่จะทำ:

curl --netrc-file my-password-file http://example.com

... เนื่องจากการส่งสตริงผู้ใช้ / รหัสผ่านธรรมดาบนบรรทัดคำสั่งเป็นความคิดที่ไม่ดี

รูปแบบของไฟล์รหัสผ่านคือ (ตามman curl):

machine <example.com> login <username> password <password>

บันทึก:

  1. ชื่อเครื่องจะต้องไม่รวมhttps://หรือคล้ายกัน! เพียงแค่ชื่อโฮสต์
  2. คำว่า ' machine', ' login' และ ' password' เป็นเพียงคำหลัก ข้อมูลจริงคือข้อมูลหลังจากคำหลักเหล่านั้น

10
ใช่นั่นทำให้รหัสผ่านไม่อยู่ในรายการกระบวนการและประวัติคำสั่ง Far วิธีที่นิยมในการทำเช่นนี้และมีเพียงการทำงานมากขึ้นเล็ก ๆ น้อย ๆ :)
AC Capehart

8
นี่ควรเป็นคำตอบที่ยอมรับได้อย่างแน่นอน รหัสผ่านบนบรรทัดคำสั่งเป็นการปฏิบัติที่น่ากลัว (และนี่คือข้อเท็จจริงที่เป็นที่รู้จักอย่างกว้างขวาง)
ELLIOTTCABLE

6
คุณยังสามารถใช้การตั้งค่าสถานะ-K <file>หรือ--config <file>เพื่อรับการตั้งค่าสถานะ curl ผ่านทางไฟล์หรืออินพุตมาตรฐาน (คำเตือน: เพื่อไม่ให้สับสน-kหรือ--insecure!)
Rufflewind

2
เมธอด curl นี้จะเก็บข้อมูลรับรองจากประวัติและสถานะของกระบวนการ แต่ปล่อยชื่อผู้ใช้และรหัสผ่านให้ชัดเจนในไฟล์ my-password- สร้างเวกเตอร์การโจมตีอีกครั้ง - แย่กว่าการมีข้อมูลในไฟล์ประวัติ: ทุบตีตัวอย่างเช่น จำกัด สิทธิ์โดยอัตโนมัติ ของไฟล์ประวัติ ปัญหาที่คล้ายกันเกิดขึ้นหากใช้ตัวแปรสภาพแวดล้อมเช่นสคริปต์เพื่อตั้งชื่อผู้ใช้ / รหัสผ่าน หากสคริปต์ไม่ปลอดภัยจะไม่มีข้อมูลรับรอง
สตีเว่นขบขันอย่างง่ายดาย

5
@SteventheEasilyAmused ฉันไม่เห็นด้วยจะดีกว่าการใช้.netrcไฟล์cleartext ที่มีการอนุญาตที่เข้มงวดอย่างเหมาะสมดังนั้นผู้ใช้ของคุณเท่านั้นที่สามารถอ่านได้มากกว่ากลไกอื่น ๆ (เช่นบรรทัดคำสั่ง) ที่ให้ผู้ใช้รายอื่นอ่านข้อมูล
Ken Williams

76

หรือสิ่งเดียวกัน แต่มีไวยากรณ์ต่างกัน

curl http://username:password@api.somesite.com/test/blah?something=123

1
ฉันใช้ไวยากรณ์นั้นเพราะสามารถใช้ได้ในหลาย ๆ สถานการณ์ ชอบจากที่ใช้ Windows cmd ไม่มีม้วนและไม่มี wget start "" "http://username:password@api.somesite.com/test/blah?something=123"ใช้ สามารถเปิดตัวได้จากทุกที่ นอกจากนี้ยังใช้กับการเข้าสู่ระบบ ftp; D
m3nda

8
คุณต้อง URL เข้ารหัสชื่อผู้ใช้และรหัสผ่านเพื่อใช้ตัวละครตลก
diachedelic

2
ฉันรู้ว่าคนส่วนใหญ่รู้ว่าจะไม่ส่งรหัสผ่าน (หรือชื่อผู้ใช้) ใน URL เช่นนี้เนื่องจากง่ายต่อการดม ด้วยที่กล่าว; ฉันไม่ได้อธิบายมัน แต่ใช้เฉพาะเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่
LosManos

1
นี่คือ suuuuuper archaic และไม่ควรใช้ นี่คือจากวัน FTP: o
Qix - MONICA ถูกยกเลิกเมื่อ

2
น่าเสียดายที่รหัสผ่านนี้จะปรากฏในรายการกระบวนการ
Mark Ribau

63

คุณสามารถส่งชื่อผู้ใช้โดยการเขียน:

curl -u USERNAME http://server.example

จากนั้น Curl จะขอรหัสผ่านจากคุณและรหัสผ่านจะไม่ปรากฏบนหน้าจอ (หรือหากคุณต้องการคัดลอก / วางคำสั่ง)


27

ในการส่งรหัสผ่านในสคริปต์อย่างปลอดภัย (เช่นป้องกันไม่ให้แสดงด้วย ps auxf หรือบันทึก) คุณสามารถทำได้ด้วยการตั้งค่าสถานะ -K- (read config จาก stdin) และ heredoc:

curl --url url -K- <<< "--user user:password"

2
ขอบคุณสำหรับการอ้างอิงถึง--configตัวเลือก (-K) ... อาจเป็นทางออกที่ดีกว่าที่จะใส่ "- ผู้ใช้ผู้ใช้: รหัสผ่าน" ลงในไฟล์และ-K the fileเพื่อให้คุณมีรหัสผ่านเพียงสำเนาเดียวแทนที่จะคัดลอกในทุกสคริปต์ . ง่ายมากที่จะรักษาความปลอดภัยไฟล์เดียว
Chris Cogdon

1
cat "${password_filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-เลือกที่คล้ายกันที่เพียงรหัสผ่านในไฟล์: ฉันต้องใส่-K-url สำหรับ macash bash เก่า YMMV
Mark Ribau

12

โดยปกติคำสั่ง CURL อ้างถึงเป็น

curl https://example.com\?param\=ParamValue -u USERNAME:PASSWORD

หากคุณไม่มีรหัสผ่านหรือต้องการข้ามพรอมต์คำสั่งเพื่อขอรหัสผ่านง่าย ๆ ปล่อยให้ส่วนรหัสผ่านว่างเปล่า

กล่าวคือ curl https://example.com\?param\=ParamValue -u USERNAME:


1
หมายเหตุ: รหัสผ่านจะปรากฏในประวัติเชลล์และรายการกระบวนการ
Mark Ribau

10
curl -X GET -u username:password  {{ http://www.example.com/filename.txt }} -O

1
หมายเหตุ: รหัสผ่านจะปรากฏในประวัติเชลล์และรายการกระบวนการ
Mark Ribau

8

ในการปล่อยให้รหัสผ่านอย่างน้อยไม่ปรากฏขึ้นใน.bash_history:

curl -u user:$(cat .password-file) http://example-domain.tld

6
ในกรณีนี้รหัสผ่านจะยังคงอยู่ในรายการกระบวนการเช่นมีใครบางคนทำps auxw |grep curlในเวลาที่เหมาะสม ในทำนองเดียวกันรหัสผ่านจะถูกบันทึกไว้หากทำงานผ่านsudo
Adam Katz

1
ด้วยวิธีนี้รหัสผ่านจะปรากฏในไฟล์ (.password-file) ซึ่งอาจไม่ปลอดภัยกว่าประวัติ. bash ส่วนที่ดีเกี่ยวกับเรื่องนี้ก็คือมันเป็นเพียงรหัสผ่าน - URL และชื่อผู้ใช้จะไม่รั่วไหลในไฟล์. password-
สตีเว่นสนุกได้อย่างง่ายดาย

7

ค่อนข้างง่ายทำด้านล่าง:

curl -X GET/POST/PUT <URL> -u username:password

ไม่มีข้อกำหนดเรื่องความปลอดภัยสำหรับคำถาม
Victor Polo De Gyves Montero

1
หมายเหตุ: รหัสผ่านจะปรากฏในประวัติเชลล์และรายการกระบวนการ
Mark Ribau

6

คำตอบอื่น ๆ ได้แนะนำ netrc เพื่อระบุชื่อผู้ใช้และรหัสผ่านตามสิ่งที่ฉันอ่านฉันเห็นด้วย นี่คือรายละเอียดไวยากรณ์บางส่วน:

https://ec.haxx.se/usingcurl-netrc.html

เช่นเดียวกับคำตอบอื่น ๆ ฉันขอย้ำความจำเป็นที่จะต้องใส่ใจกับความปลอดภัยเกี่ยวกับคำถามนี้

แม้ว่าฉันไม่ใช่ผู้เชี่ยวชาญ แต่ฉันพบว่าลิงก์เหล่านี้ลึกซึ้ง:

https://ec.haxx.se/cmdline-passwords.html

เพื่อสรุป:

การใช้โปรโตคอลที่เข้ารหัสรุ่น (HTTPS vs HTTP) (FTPS vs FTP) สามารถช่วยหลีกเลี่ยงการรั่วไหลของเครือข่าย

การใช้netrcสามารถช่วยหลีกเลี่ยง Command Line Leakage

หากต้องการไปอีกขั้นดูเหมือนว่าคุณสามารถเข้ารหัสไฟล์ netrc โดยใช้ gpg

https://brandur.org/fragments/gpg-curl

ด้วยสิ่งนี้ข้อมูลประจำตัวของคุณจะไม่ "อยู่นิ่ง" (เก็บไว้) เป็นข้อความธรรมดา


5

ธรรมดาและเพียงแค่ใส่วิธีที่ปลอดภัยที่สุดคือการใช้ตัวแปรสภาพแวดล้อมในการจัดเก็บ / ดึงข้อมูลประจำตัวของคุณ ดังนั้นคำสั่ง curl เช่น:

curl -Lk -XGET -u "${API_USER}:${API_HASH}" -b cookies.txt -c cookies.txt -- "http://api.somesite.com/test/blah?something=123"

จากนั้นก็จะเรียก API พักผ่อนของคุณและผ่าน http WWW_Authenticationหัวกับเข้ารหัส Base64 ค่าและAPI_USER เพียงแค่บอกขดที่จะปฏิบัติตาม http 30x เปลี่ยนเส้นทางและใช้ TLS ที่ไม่ปลอดภัยการจัดการ (เช่นละเว้นข้อผิดพลาด SSL) ในขณะที่ double เป็นเพียง bash syntax sugar เพื่อหยุดการประมวลผลแฟล็กบรรทัดคำสั่ง นอกจากนี้และการตั้งค่าสถานะจัดการคุกกี้ด้วยการส่งคุกกี้และจัดเก็บคุกกี้ในพื้นที่API_HASH-Lk---b cookies.txt-c cookies.txt-b-c

คู่มือมีตัวอย่างเพิ่มเติมของวิธีการรับรองความถูกต้อง


1
โปรดจำไว้ว่าการใช้ "-Lk" สามารถเปิดคุณได้ถึงการโจมตีแบบ man-in-the-middle (MITM) ดังนั้นใช้ความระมัดระวังด้วยตัวเลือกนั้น
GuyPaddock

4
สิ่งนี้ไม่ทำงาน ... เนื่องจาก bash จะขยายตัวแปรเหล่านั้นให้คุณการขยายจะปรากฏในรายการกระบวนการ
Chris Cogdon


4

วิธีที่ปลอดภัยที่สุดในการส่งข้อมูลรับรองไปยังขดคือการได้รับแจ้งให้ใส่พวกเขา นี่คือสิ่งที่เกิดขึ้นเมื่อส่งชื่อผู้ใช้ตามที่แนะนำไว้ก่อนหน้า ( -u USERNAME)

แต่ถ้าคุณไม่สามารถส่งชื่อผู้ใช้ด้วยวิธีนั้น ตัวอย่างเช่นชื่อผู้ใช้อาจต้องเป็นส่วนหนึ่งของ URL และรหัสผ่านเท่านั้นที่เป็นส่วนหนึ่งของ json payload

tl; dr: นี่คือวิธีใช้ curl อย่างปลอดภัยในกรณีนี้:

read -p "Username: " U; read -sp "Password: " P; curl --request POST -d "{\"password\":\"${P}\"}" https://example.com/login/${U}; unset P U

read จะแจ้งให้ทั้งชื่อผู้ใช้และรหัสผ่านจากบรรทัดคำสั่งและเก็บค่าที่ส่งในตัวแปรสองตัวที่สามารถอ้างอิงในคำสั่งต่อมาและยกเลิกการตั้งค่าในที่สุด

ฉันจะอธิบายอย่างละเอียดว่าทำไมโซลูชั่นอื่น ๆ จึงไม่เหมาะ

ทำไมตัวแปรสภาพแวดล้อมไม่ปลอดภัย

  1. โหมดการเข้าถึงและการเปิดรับแสงของเนื้อหาของตัวแปรสภาพแวดล้อมไม่สามารถติดตามได้ (ps -eww) เนื่องจากสภาพแวดล้อมพร้อมใช้งานสำหรับกระบวนการโดยปริยาย
  2. บ่อยครั้งที่แอพพลิเคชั่นคว้าสภาพแวดล้อมทั้งหมดและบันทึกมันเพื่อการดีบักหรือตรวจสอบจุดประสงค์ (บางครั้งในไฟล์บันทึกข้อความธรรมดาบนดิสก์โดยเฉพาะหลังจากที่แอปล่ม)
  3. ตัวแปรสภาพแวดล้อมถูกส่งผ่านไปยังกระบวนการลูก (ดังนั้นการทำลายหลักการของสิทธิ์น้อยที่สุด)
  4. การดูแลรักษาเป็นปัญหา: วิศวกรใหม่ไม่ทราบว่ามีและไม่ทราบถึงข้อกำหนดรอบตัวเช่นไม่ส่งต่อไปยังกระบวนการย่อย - เนื่องจากไม่มีการบังคับใช้หรือทำเป็นเอกสาร

เหตุใดจึงไม่ปลอดภัยที่จะพิมพ์ลงในคำสั่งบนบรรทัดคำสั่งโดยตรง เนื่องจากความลับของคุณจะปรากฏให้ผู้ใช้รายอื่น ๆ เรียกใช้เนื่องจากความลับของคุณps -auxแสดงรายการคำสั่งที่ส่งสำหรับแต่ละกระบวนการที่กำลังทำงานอยู่ และเนื่องจาก secrte ของคุณจะจบลงด้วยประวัติทุบตี (เมื่อเชลล์ยกเลิก)

เหตุใดจึงไม่ปลอดภัยที่จะรวมไว้ในไฟล์โลคัล การ จำกัด การเข้าถึงอย่างเข้มงวด POSIX บนไฟล์สามารถลดความเสี่ยงในสถานการณ์นี้ อย่างไรก็ตามมันยังคงเป็นไฟล์ในระบบไฟล์ของคุณโดยไม่มีการเข้ารหัสที่เหลือ


2
ดูเหมือนว่าวิธีนี้จะยังคงแสดงรหัสผ่านในรายการกระบวนการหรือไม่
Mark Ribau

4

ฉันต้องการทุบตีเดียวกัน (Ubuntu 16.04 LTS) และคำสั่งที่ให้ไว้ในคำตอบล้มเหลวในการทำงานในกรณีของฉัน ฉันต้องใช้:

curl -X POST -F 'username="$USER"' -F 'password="$PASS"' "http://api.somesite.com/test/blah?something=123"

เครื่องหมายอัญประกาศคู่ใน-Fอาร์กิวเมนต์จำเป็นเฉพาะเมื่อคุณใช้ตัวแปรดังนั้นจากบรรทัดคำสั่ง... -F 'username=myuser' ...จะใช้ได้

ประกาศด้านความปลอดภัยที่เกี่ยวข้อง: เนื่องจากMr. Mark Ribauชี้ให้เห็นในความคิดเห็นคำสั่งนี้จะแสดงรหัสผ่าน (ตัวแปร $ PASS, ส่วนขยาย) ในรายการกระบวนการ!


1
ดูเหมือนว่าจะยังคงแสดงมูลค่า $ PASS ในรายการกระบวนการหรือไม่
Mark Ribau

ใช่มันน่าเสียดาย
Marco

1

หากคุณอยู่ในระบบที่มีแอปพวงกุญแจ Gnome ทางออกที่หลีกเลี่ยงการเปิดเผยรหัสผ่านโดยตรงคือการใช้ gkeyring.pyเพื่อแยกรหัสผ่านจากพวงกุญแจ:

server=server.example.com
file=path/to/my/file
user=my_user_name
pass=$(gkeyring.py -k login -tnetwork -p user=$user,server=$server -1)

curl -u $user:$pass ftps://$server/$file -O

1
หมายเหตุ: รหัสผ่านจะปรากฏในรายการกระบวนการ (และประวัติศาสตร์หากนี่ไม่ใช่ส่วนหนึ่งของสคริปต์)
Mark Ribau

1

นี่คือมากกว่า OP ที่ขอมา แต่เนื่องจากนี่เป็นผลลัพธ์ที่ดีที่สุดสำหรับการส่งผ่านรหัสผ่านอย่างปลอดภัย curlฉันจึงเพิ่มโซลูชันเหล่านี้ที่นี่เพื่อผู้อื่นที่มาถึงที่นี่เพื่อค้นหาสิ่งนั้น


หมายเหตุ: -sหาเรื่องสำหรับreadคำสั่งไม่ใช่ POSIX และไม่สามารถใช้งานได้ทุกที่ดังนั้นจะไม่ถูกใช้ด้านล่าง เราจะใช้stty -echoและstty echoแทน

หมายเหตุ: ตัวแปรทุบตีด้านล่างทั้งหมดสามารถประกาศเป็นคนท้องถิ่นได้หากอยู่ในฟังก์ชันแทนที่จะยกเลิกการตั้งค่า

หมายเหตุ: perlโดยทั่วไปแล้วค่อนข้างใช้ได้ในทุกระบบที่ฉันได้ลองเพราะมันเป็นการพึ่งพาหลายสิ่งในขณะที่rubyและpythonไม่ใช้ดังนั้นจึงใช้perlที่นี่ หากคุณสามารถรับประกันruby/ pythonคุณกำลังทำสิ่งนี้อยู่คุณสามารถแทนที่perlคำสั่งด้วยสิ่งที่เทียบเท่าได้

หมายเหตุ: ทดสอบในbash3.2.57 บน macOS 10.14.4 อาจจำเป็นต้องใช้การแปลเล็กน้อยสำหรับเชลล์ / ติดตั้งอื่น ๆ


ขอให้ผู้ใช้รหัสผ่าน (นำมาใช้ใหม่) อย่างปลอดภัยส่งผ่านไปยัง curl มีประโยชน์อย่างยิ่งหากคุณจำเป็นต้องโทรหาขดหลาย ๆ ครั้ง

สำหรับกระสุนสมัยใหม่ที่echoมีในตัว (ตรวจสอบผ่านwhich echo):

url='https://example.com'
printf "Username: "
read username
printf "Password: "
stty -echo  # disables echoing user input, POSIX equivalent for 'read -s'
read pass
printf "\n" # we need to move the line ahead
stty echo   # re-enable echoing user input
echo ${pass} | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
unset username
unset pass

สำหรับกระสุนเก่าที่echoมีลักษณะคล้าย/bin/echo(ที่ใดก็ตามที่สามารถสะท้อนได้ในรายการกระบวนการ):
รุ่นนี้ไม่สามารถนำรหัสผ่านกลับมาใช้ใหม่ได้ให้ลดระดับลงแทน

url='https://example.com'
printf "Username: "
read username
printf "Password: "
stty -echo  # disables echoing user input, POSIX equivalent for 'read -s'
perl -e '
    my $val=<STDIN>;
    chomp $val;
    print STDERR "\n";  # we need to move the line ahead, but not send a newline down the pipe
    print $val;
' | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
stty echo   # re-enable echoing user input
unset username



หากคุณจำเป็นต้องจัดเก็บรหัสผ่านไว้ชั่วคราวในไฟล์เพื่อนำมาใช้ใหม่สำหรับคำสั่งหลาย ๆ คำสั่งก่อนที่จะล้างมัน (พูดเพราะคุณกำลังใช้ฟังก์ชั่นสำหรับการใช้รหัสซ้ำและไม่ต้องการทำซ้ำรหัสและไม่สามารถ ส่งค่าผ่านทาง echo) (ใช่สิ่งเหล่านี้เป็นการมองที่เล็กน้อยในรูปแบบนี้ไม่ใช่การทำงานในไลบรารีที่แตกต่างกันฉันพยายามที่จะลดให้เหลือรหัสขั้นต่ำที่จำเป็นในการแสดง)

เมื่อเสียงสะท้อนนั้นถูกสร้างขึ้นมา (นี่เป็นสิ่งที่เกิดขึ้นโดยเฉพาะอย่างยิ่งเนื่องจากเสียงสะท้อนนั้นเป็นแบบในตัว แต่มีไว้เพื่อความสมบูรณ์):

url='https://example.com'
filepath="$(mktemp)"  # random path, only readable by current user
printf "Username: "
read username
printf "Password: "
stty -echo  # disables echoing user input, POSIX equivalent for 'read -s'
read pass
echo "${pass}" > "${filepath}"
unset pass
printf "\n" # we need to move the line ahead
stty echo   # re-enable echoing user input

cat "${filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-

rm "${filepath}"  # don't forget to delete the file when done!!
unset username

เมื่อเสียงสะท้อนเป็นสิ่งที่ชอบ/bin/echo:

url='https://example.com'
filepath="$(mktemp)"  # random path, only readable by current user
printf "Username: "
read username
printf "Password: "
stty -echo  # disables echoing user input, POSIX equivalent for 'read -s'
$(perl -e '
    my $val=<STDIN>;
    chomp $val;
    open(my $fh, ">", $ARGV[0]) or die "Could not open file \"$ARGV[0]\" $\!";
    print $fh $val;
    close $fh;
' "$filepath")
printf "\n" # we need to move the line ahead
stty echo   # re-enable echoing user input

cat "${filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-

rm "${filepath}"  # don't forget to delete the file when done!!
unset username
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.