Score:1

มีวิธีใดบ้างในการรับ openssl s_client เพื่ออ่านจาก stdin?

ธง cn

ฉันต้องการสร้างสคริปต์ที่สร้างรายการอีเมลตีกลับในบัญชี gmail ฉันรู้ว่าฉันสามารถเชื่อมต่อโดยใช้:

opensl s_client -crlf -เชื่อมต่อ imap.gmail.com:993

ตอนแรกฉันลองทำดังนี้:

opensl s_client -crlf -เชื่อมต่อ imap.gmail.com:993 <<!
ล็อกอิน [email protected] Apa55w0rd
เลือก INBOX
การค้นหาวันที่ 4 ต.ค. 2564
!

อย่างไรก็ตาม ทั้งหมดที่ฉันได้รับกลับมาคือการตอบสนองเริ่มต้นจากการเชื่อมต่อกับเซิร์ฟเวอร์ ไม่มีอะไรจากคำสั่ง มันไม่อ่าน stdin อย่างชัดเจน มีวิธีใดที่จะทำให้ s_client อ่านคำสั่งจากไฟล์ (โดยเฉพาะ stdin)

แก้ไข

ฉันได้ลองใช้คำแนะนำในโพสต์ที่เชื่อมโยงโดย Gerald Schneider (https://stackoverflow.com/questions/13707092/openssl-pass-first-few-lines-from-script-then-read-from-stdin) แต่ดูเหมือนจะไม่ทำงาน - อย่างน้อยก็ไม่ได้สร้างผลลัพธ์ที่ฉันตามมา:

รูท db1 : cat <<! | opensl s_client -crlf -เชื่อมต่อ imap.gmail.com:993
ล็อกอิน [email protected] Apa55w0rd
เลือก INBOX
การค้นหาวันที่ 4 ต.ค. 2564
!

เชื่อมต่อแล้ว(00000003)
deep=2 C = US, O = Google Trust Services LLC, CN = GTS Root R1
ตรวจสอบผลตอบแทน:1
เชิงลึก=1 C = สหรัฐอเมริกา O = Google Trust Services LLC, CN = GTS CA 1C3
ตรวจสอบผลตอบแทน:1
ความลึก=0 CN = imap.gmail.com
ตรวจสอบผลตอบแทน:1
---
ห่วงโซ่ใบรับรอง
 0 วินาที:/CN=imap.gmail.com
   i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1C3
 1 วินาที:/C=US/O=Google Trust Services LLC/CN=GTS CA 1C3
   i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
 2 วินาที:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
   i:/C=BE/O=GlobalSign nv-sa/OU=รูท CA/CN=รูต CA ของ GlobalSign
---
ใบรับรองเซิร์ฟเวอร์
-----เริ่มต้นใบรับรอง-----
MIIFUzCCBDugAwIBAgIRANYAB4MRC2TJCgAAAAD/Y6YwDQYJKoZIhvcNAQELBQAw
RjELMAkGA1UEBhMCVVMxIjAgBgNVBAoTGUdvb2dsZSBUcnVzdCBTZXJ2aWNlcyBM
TEMxEzARBgNVBAMTCkdUUyBDQSAxQzMwHhcNMjEwOTEzMDMxMTI3WhcNMjExMTIw
MDMxMTI2WjaZMRcwFQYDVQQDEw5pbWFwLmdtYWlsLmNvbTCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBALRQpfQvddKjDkAtx0dNu8ifeLqzo8Lv6892Ij8O
KZBsAGcP39G9elE5UGklMH4Jzo88scMmSq+gTNW+Zss/DJ64RMfh/hBXSemdlfnF
Ro/HywsuPZ4YqHOVBvgW+7/K7YspqhfKn/oSZl5jCXz/J6qcxX7O9+phWD7nWwGS
ksrNkuwBT2fg/mA64q0sGgz+cE0k8LGwWoJSZ+B3Nosl07IKv9Jwddxu85d5cAcQ
djoEHiGTF4bluMlkHKlzQhNLh8bEiAkMV/pu/79D1HD+05z6I2EXt+f7O0Dgc8HC
hYHYGw2x2T4ZHAEH+0vG+2CTQMcNoTJ4jfITe4/OUaDm39ECAwEAAaOCAMcwggJj
MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8E
AjAAMB0GA1UdDgQWBBQGYvnDmgImhQkT2mNBuYvWoMf2wTAfBgNVHSMEGDAWgBSK
dH+vhc3ulc09nNDiRhTzcTUdJzBqBggrBgEFBQcBAQReMFwwJwYIKwYBBQUHMAGG
G2h0dHA6Ly9vY3NwLnBraS5nb29nL2d0czFjMzAxBggrBgEFBQcwAoYlaHR0cDov
L3BraS5nb29nL3JlcG8vY2VydHMvZ3RzMWMzLmRlcjaAZBgNVHREEEjAQgg5pbWFw
LmdtYWlsLmNvbTAhBgNVHSAEGjAYMAgGBmeBDAECATAMBgorBgEEAdZ5AgUDMDwG
A1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmxzLnBraS5nb29nL2d0czFjMy9mVkp4
YlYtS3Rtay5jcmwwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdQDuwJXujXJkD5Lj
w7kbxxKjaWoJe0tqGhQ45keyy+3F+QAAAXvdWlDzAAAAEAwBGMEQCICZIv+JvLRvF
G192uY3wdMdxa7F1Cjkf4Ts++Nj+VBcTAiBTVo0coasZSSvLhfhpFFgVaYjALw1d
kjNEGOhKDfNX4gB3APZclC/RdzAiFFQYCDCUVo7jTRMZM7/fDC8gC8xO8WTjAAAB
e91aUA0AAAQDAEgwRgIhAJZ/m/XmVsCx5iuxrdiHmKWq04qmdutaRSqyG2X6wFED
AiEAwvkkC+8egz7BfGcAcsdx04FzMrDYfReDn6elgMCsBBAwDQYJKoZIhvcNAQEL
BQADggEBAD+0liFWMdNxq5xWOLiTCw1mWatA3ZdrDqi51cYN4thboxRa+iNfYUn/
AvSel4sJ+5HhdUmgSpXc98x/OFybrYyLXg/Tk3R1hgZmRsgUTrGMP6H6bkrA1du9
qt23JMScvB2P5pmGMoXdKh1dGaigaIEErixhjlALztEvrWUVSzmpg6A4yx0O/9lw
iHgXY0XNcjtZJ/2tta0nizTMKn2NJbjAW2Pdi0GDZUV9DRcicdvhB9uFd/RFEU2o
muPY4eRc/P4n6NE7TH2S3aEGxD74hwZSmb1Jo/g7L8Ta1caomqHIEFBBU4G+8x0h
8XQpI2zZhTJ82wPjEz7GrVdJt/KDwy0=
-----จบใบรับรอง-----
เรื่อง=/CN=imap.gmail.com
ผู้ออก=/C=US/O=Google Trust Services LLC/CN=GTS CA 1C3
---
ไม่มีการส่งชื่อ CA ของใบรับรองไคลเอ็นต์
สรุปการลงนามเพียร์: SHA256
คีย์อุณหภูมิเซิร์ฟเวอร์: X25519, 253 บิต
---
SSL handshake อ่าน 4870 ไบต์และเขียน 261 ไบต์
การยืนยัน: ตกลง
---
ใหม่ TLSv1.2 รหัสคือ ECDHE-RSA-CHACHA20-POLY1305
รหัสสาธารณะของเซิร์ฟเวอร์คือ 2048 บิต
รองรับการเจรจาต่อรองใหม่อย่างปลอดภัย
การบีบอัด: ไม่มี
การขยายตัว: ไม่มี
ไม่มีการเจรจา ALPN
เซสชัน SSL:
    โปรโตคอล : TLSv1.2
    รหัส : ECDHE-RSA-CHACHA20-POLY1305
    รหัสเซสชัน: FA01523E2366640CFAA49BFA681D23F7118556474A67072E09F188D42B4FCDAB
    เซสชัน-ID-ctx:
    มาสเตอร์คีย์: F26BDF82C66AE5B7D08847C29D786E382212B8017292EEE7A826D2085FC6F73877441EDC72EDFF2A66342EDE147EB2EE
    ตัวตน PSK: ไม่มี
    คำใบ้ประจำตัว PSK: ไม่มี
    ชื่อผู้ใช้ SRP: ไม่มี
    คำใบ้อายุการใช้งานตั๋วเซสชัน TLS: 100800 (วินาที)
    ตั๋วเซสชั่น TLS:
    0000 - 01 d9 8f a9 94 2e 5a 89-e0 93 18 8f 99 fc 66 63 ......Z.......fc
    0010 - c3 b5 cb 58 7b ba ae 67-d4 4d c6 6b e9 56 f5 48 ...X{..g.M.k.V.H
    0020 - b3 c7 21 b6 39 84 c5 f0-77 3b 74 95 c3 84 9a 1e ..!.9...w;t.....
    0030 - 6a 18 f9 a0 73 41 99 f4-b4 fb c8 4f 32 64 bc 4e j...sA.....O2d.N
    0040 - 70 64 b8 de 50 27 7d 34-b1 c9 a0 e1 9c c4 8d e6 pd..P'}4........
    0050 - cb cf 09 92 a3 5c 9e 09-75 27 e0 f4 d0 fc 75 06 .....\..u'....u.
    0060 - f0 7e 1b 37 f7 6d 74 b3-d9 cb 24 32 a9 fd d0 aa .~.7.mt...$2....
    0070 - a2 9e 7d e0 58 1d 70 83-e8 a3 f0 5c 1c eb ce 09 ..}.X.p....\....
    0080 - 08 92 d0 de 28 84 6e 14-51 3a 99 a7 20 f3 5c b5 ....(.n.Q:.. .\.
    0090 - 98 9e b5 6a 62 d4 ดา 45-42 52 70 2b 21 49 46 0e ...jb..EBRp+!IF.
    00a0 - 87 ca b3 90 a2 d8 5a b8-1d c4 8a 55 e2 57 88 20 ......Z....U.W.
    00b0 - 5f a1 3d 7e d0 84 53 51-d0 a7 c4 e1 f3 30 69 2c _.=~..SQ.....0i,
    00c0 - 68 16 18 3f 29 28 d5 42-fa cd d2 11 da 2d b2 c2 h..?)(.B.....-..
    00d0 - 9e e3 ef 50 b9 dc b6 97-fa 66 4e 71 6d 02 6a 6e ...P.....fNqm.jn
    00e0 - 91 3b.;

    เวลาเริ่มต้น: 1633347887
    หมดเวลา : 7200 (วินาที)
    ตรวจสอบรหัสส่งคืน: 0 (ตกลง)
    ความลับหลักเพิ่มเติม: ใช่
---
เสร็จแล้ว
in flag
https://stackoverflow.com/questions/13707092/openssl-pass-first-few-lines-from-script-then-read-from-stdin
j4nd3r53n avatar
cn flag
ดังนั้น `openssl s_client` สามารถอ่านได้จาก stdin หากอยู่ที่ปลายรับของไปป์ไลน์เท่านั้น
j4nd3r53n avatar
cn flag
@GeraldSchneider ฉันไปตามลิงค์ แต่มันใช้ไม่ได้สำหรับฉัน - ดูแก้ไข
Score:1
ธง cn

เมื่อดูซอร์สโค้ดดูเหมือนว่า s_client อ่านจากคอนโซลหรืออุปกรณ์ TTY เท่านั้นไม่ใช่จาก stdin ใด ๆ

คุณสามารถแก้ไขได้โดยการแทรกโปรแกรมที่ล้อมรอบ (หลอก) TTY รอบคำสั่ง

หน้าจอ ทำได้ แต่มันค่อนข้างยาก บางครั้งฉันใช้ จุ๊ๆ เล่ห์เหลี่ยม.

นอกจากนี้ยังมี goto สำหรับโปรแกรมคอนโซลแบบโต้ตอบ (คาดหวัง): https://linux.die.net/man/1/expectแต่ไม่เคยลองเลย

กับ สสส

echo -e 'GET / HTTP/1.0\nโฮสต์: www.example.com\n\n' | ssh -tt user@localhost 'openssl s_client -crlf -ชื่อเซิร์ฟเวอร์ www.example.com -brief -connect www.example.com:443'

-tt บังคับการจัดสรร TTY ซึ่งโดยค่าเริ่มต้น ssh จะไม่ทำ หากตรวจพบไปป์

ข้อเสียคือคุณต้องตั้งค่าการเชื่อมต่อ SSH แบบย้อนกลับให้เข้าสู่ระบบโดยอัตโนมัติเพื่อใช้ในสคริปต์

นี่ไม่ใช่ไบนารีที่ปลอดภัย สำหรับ ASCII อย่างง่ายจะทำ

ด้วยหน้าจอ

ค่อนข้างยาก แต่ลบความยุ่งยากในการเข้าสู่ระบบ

เตรียมไฟล์ สอบถาม พร้อมบรรทัดสำหรับป้อนข้อมูลไปยังเซิร์ฟเวอร์

ตัวอย่างเช่น:

เก็ท / HTTP/1.0
โฮสต์: www.example.com

สร้างหน้าจอเดี่ยวพร้อมชื่อ หน้าจอของฉัน และบันทึกเอาต์พุตไปที่ ./out.log

หน้าจอ -d -m -S myscreen -L -Logfile ./out.log

ส่งคำสั่งเชื่อมต่อ openssl (-X สิ่ง) ไปที่หน้าต่างแรก (-p 0) ของหน้าจอชื่อ หน้าจอของฉัน (-S มายสกรีน) แล้วส่งข้อมูลจากไฟล์ทันที ./สอบถาม. โปรดทราบว่าการแทนที่กระบวนการ $(cat..) จะทำให้การขึ้นบรรทัดใหม่ต่อท้ายในไฟล์ล้มเหลว ./สอบถาม และคำสั่ง opensl ต้องมี -crlf ในกรณีของโปรโตคอล HTTP ต้องส่งข้อมูลแบบสอบถามไม่นานหลังจากเปิดการเชื่อมต่อ มิฉะนั้น s_client จะหมดเวลา

หน้าจอ -S myscreen -p 0 -X สิ่งที่ "openssl s_client -crlf -ชื่อเซิร์ฟเวอร์ www.example.com -brief -เชื่อมต่อ www.example.com:443^M";screen -S myscreen -p 0 -X สิ่งที่ "$( แมว ./query)^M^M"

สุดท้ายออกจากหน้าจอเพื่อลบ หน้าจอของฉัน เซสชัน (ซึ่งถือว่าการสืบค้นก่อนหน้านี้ทำให้เซิร์ฟเวอร์หยุดการเชื่อมต่อแล้วและ s_client ออกจากตัวเอง):

หน้าจอ -S myscreen -p 0 -X สิ่งที่ "ออก ^ M"

เอาต์พุตรวมถึงแบบสอบถามและทางออกและเอาต์พุต s_client อยู่ในตอนนี้ ./out.log

หาก s_client ไม่ออกหลังจากการสืบค้น คุณสามารถส่งสัญญาณขัดจังหวะก่อนได้

หน้าจอ -S myscreen -p 0 -X สิ่ง "^C"

j4nd3r53n avatar
cn flag
+1 สำหรับสิ่งนี้ - ฉันลืมคาดหวัง ด้วยเหตุผลบางอย่างไม่พบที่ไหนเลยในเดเบียน 11 หรือ Ubuntu 20.04 แต่ฉันคิดว่าเคล็ดลับ ssh นั้นมีประโยชน์สำหรับฉัน
Gerrit avatar
cn flag
สำหรับ Ubuntu 20.04 คุณจะต้องรวมที่เก็บ _universe_ https://packages.ubuntu.com/focal/expect
Score:0
ธง cn

s_client อ่านจาก สเตดินแต่โดยค่าเริ่มต้นจะปิดทันทีที่ สเตดิน ปิดครับ ลองใช้ดูครับ -ign_eof.

นอกจากนี้ยังเห็น คุณไพพ์ "echo" เป็น "openssl" ได้อย่างไร

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา