วิธีการซ่อนรหัสผ่านที่ผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่ง?


43

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

$ darkcoind masternode start <mypassphrase>

ตอนนี้ฉันมีความกังวลด้านความปลอดภัยบนเซิร์ฟเวอร์เดเบียนที่ไม่มีหัวของฉัน

เมื่อใดก็ตามที่ฉันค้นหาประวัติทุบตีของฉันด้วยCtrl+Rฉันสามารถดูรหัสผ่านที่แข็งแกร่งสุดนี้ ตอนนี้ฉันจินตนาการว่าเซิร์ฟเวอร์ของฉันถูกบุกรุกและผู้บุกรุกบางคนมีสิทธิ์เข้าถึงเชลล์และสามารถCtrl+Rค้นหาข้อความรหัสผ่านของฉันในประวัติศาสตร์ได้

มีวิธีการใส่รหัสผ่านโดยไม่ได้ที่จะแสดงในประวัติศาสตร์ทุบตีps, /procหรืออื่นใด?


อัปเดต 1 : การส่งรหัสผ่านไปที่ daemon จะไม่มีข้อผิดพลาดเกิดขึ้น ไม่มีตัวเลือกนี้


อัปเดต 2 : อย่าบอกให้ฉันลบซอฟต์แวร์หรือคำแนะนำที่เป็นประโยชน์อื่น ๆ เช่นการแขวนนักพัฒนา ฉันรู้ว่านี่ไม่ใช่ตัวอย่างการปฏิบัติที่ดีที่สุด แต่ซอฟต์แวร์นี้ใช้bitcoinและลูกค้า bitcoin ทั้งหมดเป็นเซิร์ฟเวอร์ json rpc บางชนิดซึ่งรับฟังคำสั่งเหล่านี้และปัญหาความปลอดภัยที่รู้จักยังคงถูกกล่าวถึง ( a , b , c ) .


อัปเดต 3 : daemon เริ่มต้นแล้วและทำงานด้วยคำสั่ง

$ darkcoind -daemon

การทำpsแสดงเฉพาะคำสั่งเริ่มต้น

$ ps aux | grep darkcoin
user     12337  0.0  0.0  10916  1084 pts/4    S+   09:19   0:00 grep darkcoin
user     21626  0.6  0.3 1849716 130292 ?      SLl  May02   6:48 darkcoind -daemon

ดังนั้นการส่งคำสั่งด้วยวลีรหัสผ่านจึงไม่ปรากฏขึ้นpsหรือ/procเลย

$ darkcoind masternode start <mypassphrase>
$ ps aux | grep darkcoin
user     12929  0.0  0.0  10916  1088 pts/4    S+   09:23   0:00 grep darkcoin
user     21626  0.6  0.3 1849716 130292 ?      SLl  May02   6:49 darkcoind -daemon

นี่เป็นคำถามที่ว่าประวัติศาสตร์จะปรากฏที่ใด เฉพาะใน.bash_history?


1
คำถามแรกต้องเป็น: จะเกิดอะไรขึ้นถ้าคุณเริ่มดีมอนโดยไม่มีอาร์กิวเมนต์ข้อความรหัสผ่าน มันแค่พร้อมท์หรือไม่?
MadHatter

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

4
ตรวจสอบเอกสารของคุณมันอาจรองรับการอ่านรหัสผ่านนั้นจากตัวแปรสภาพแวดล้อมของระบบ
Elliott Frisch

3
แม้ว่ารหัสผ่านจะไม่ได้รับบนบรรทัดคำสั่งให้กับ daemon ก็ยังคงเป็นปัญหาที่จะให้มันในบรรทัดคำสั่งของคำสั่งอื่น ๆ มันสามารถมองเห็นได้ในเอาต์พุต ps เป็นเวลาสั้น ๆ แต่กระบวนการที่ทำงานในพื้นหลังยังคงสามารถรับมันได้ แต่แน่นอนว่ามันยังคุ้มค่าที่จะทำให้ยากต่อการรับรหัสผ่าน
kasperd

2
ดูคำตอบสำหรับคำถามนี้พวกเขาจัดการกับปัญหานี้อย่างแน่นอน
dotancohen

คำตอบ:


68

จริงๆนี้ควรได้รับการแก้ไขในแอปพลิเคชันเอง และแอปพลิเคชันดังกล่าวควรเป็นโอเพ่นซอร์สดังนั้นการแก้ไขปัญหาในแอปควรเป็นตัวเลือก แอปพลิเคชันที่เกี่ยวข้องกับความปลอดภัยซึ่งทำให้เกิดข้อผิดพลาดประเภทนี้อาจทำให้เกิดข้อผิดพลาดอื่นเช่นกันดังนั้นฉันจะไม่เชื่อใจ

ตัวคั่นง่าย

แต่คุณกำลังขอวิธีที่แตกต่างดังนั้นนี่คือ:

#define _GNU_SOURCE
#include <dlfcn.h>

int __libc_start_main(
    int (*main) (int, char * *, char * *),
    int argc, char * * ubp_av,
    void (*init) (void),
    void (*fini) (void),
    void (*rtld_fini) (void),
    void (* stack_end)
  )
{
  int (*next)(
    int (*main) (int, char * *, char * *),
    int argc, char * * ubp_av,
    void (*init) (void),
    void (*fini) (void),
    void (*rtld_fini) (void),
    void (* stack_end)
  ) = dlsym(RTLD_NEXT, "__libc_start_main");
  ubp_av[argc - 1] = "secret password";
  return next(main, argc, ubp_av, init, fini, rtld_fini, stack_end);
}

รวบรวมสิ่งนี้ด้วย

gcc -O2 -fPIC -shared -o injectpassword.so injectpassword.c -ldl

จากนั้นเรียกใช้กระบวนการของคุณด้วย

LD_PRELOAD=$PWD/injectpassword.so darkcoind masternode start fakepasshrase

ไลบรารีตัวคั่นจะเรียกใช้รหัสนี้ก่อนที่จะเรียกใช้mainฟังก์ชันจากแอปพลิเคชันของคุณ มันจะแทนที่อาร์กิวเมนต์บรรทัดคำสั่งสุดท้ายด้วยรหัสผ่านจริงในการโทรไปยังหลัก บรรทัดคำสั่งตามที่พิมพ์ไว้ใน/proc/*/cmdline(และเห็นด้วยเครื่องมือเช่นps) จะยังคงมีอาร์กิวเมนต์ปลอมอยู่ เห็นได้ชัดว่าคุณต้องสร้างซอร์สโค้ดและchmod 0700ไลบรารี่ที่คุณคอมไพล์จากมันเท่านั้นที่สามารถอ่านได้ด้วยตัวเองดังนั้นทำงานได้ดีที่สุดในไดเรกทอรี และเนื่องจากรหัสผ่านไม่ได้เป็นส่วนหนึ่งของการเรียกใช้คำสั่งประวัติทุบตีของคุณก็ปลอดภัยเช่นกัน

ตัวคั่นขั้นสูงเพิ่มเติม

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

#define _GNU_SOURCE
#include <dlfcn.h>
#include <unistd.h>

static int (*real_main) (int, char * *, char * *);

static int my_main(int argc, char * * argv, char * * env) {
  char *pass = getpass(argv[argc - 1]);
  if (pass == NULL) return 1;
  argv[argc - 1] = pass;
  return real_main(argc, argv, env);
}

int __libc_start_main(
    int (*main) (int, char * *, char * *),
    int argc, char * * ubp_av,
    void (*init) (void),
    void (*fini) (void),
    void (*rtld_fini) (void),
    void (* stack_end)
  )
{
  int (*next)(
    int (*main) (int, char * *, char * *),
    int argc, char * * ubp_av,
    void (*init) (void),
    void (*fini) (void),
    void (*rtld_fini) (void),
    void (* stack_end)
  ) = dlsym(RTLD_NEXT, "__libc_start_main");
  real_main = main;
  return next(my_main, argc, ubp_av, init, fini, rtld_fini, stack_end);
}

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

LD_PRELOAD=$PWD/injectpassword.so darkcoind masternode start "Password: "

อีกทางเลือกหนึ่งจะอ่านรหัสผ่านจากตัวให้คำอธิบายไฟล์ (เช่นgpg --passphrase-fdทำเช่นนั้น) หรือจากx11-ssh-askpassหรืออะไรก็ตาม


4
แม้ว่าฉันจะไม่เข้าใจและไม่สามารถทดสอบโค้ดได้ แต่ฉันก็ได้รับส่วนสำคัญและนี่เป็นคำตอบที่แท้จริงและควรเป็นคำตอบที่ดีที่สุด
Mark Henderson

นี่มันช่างยอดเยี่ยมจริงๆ
Waqar Lim

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

1
มันควรจะเป็นไปได้ที่จะใช้รหัสผ่านใน STDIN และยังคงมีงานนี้ซึ่งจะลบstringsช่องโหว่ ดูSO: ใส่รหัสผ่านซ่อนใน terminal
Grubermensch

1
@ mulg0r: Standard extern "C"ควรทำเคล็ดลับของการปราบปรามชื่อ mangling __libc_start_mainสำหรับฟังก์ชั่นที่เกี่ยวข้องคือ
MvG

28

มันไม่ใช่แค่ประวัติศาสตร์ มันจะแสดงในเอาต์พุตpsเช่นกัน

ใครก็ตามที่เขียนชิ้นส่วนของซอฟต์แวร์นั้นควรถูกแขวนวาดและแบ่งออกเป็นสี่ส่วน ไม่จำเป็นที่จะต้องใส่รหัสผ่านบนบรรทัดคำสั่งโดยไม่คำนึงว่าซอฟต์แวร์ใดก็ตาม
สำหรับกระบวนการภูตมันยิ่งให้อภัยไม่ได้ ...

นอกจากrm-fบนตัวซอฟต์แวร์เองฉันไม่รู้วิธีแก้ปัญหาสำหรับเรื่องนี้ สุจริต: ค้นหาซอฟต์แวร์อื่น ๆ เพื่อให้งานสำเร็จลุล่วง อย่าใช้ขยะเช่นนั้น


9
ขอบคุณที่ไม่ช่วยอะไรเลย นี่เป็นปัญหาด้านความปลอดภัยที่กล่าวถึงมานานยังไม่ได้รับการแก้ไขและฉันต้องการวิธีแก้ปัญหาที่ดีกว่าrm -fนี้
Waqar Lim

17
จริงๆแล้วเขามีประโยชน์มาก psหากคุณกำลังผ่านรหัสผ่านเป็นอาร์กิวเมนต์ก็จะแสดงขึ้นมาใน ดังนั้นจนกว่า dev สามารถแก้ไขได้เขาแนะนำให้ใช้อย่างอื่น
Safado

3
จากนั้นคุณควรเริ่มเขียนระบบปฏิบัติการอื่น ไม่มีวิธีแก้ปัญหาอื่นในขณะนี้ที่ฉันทราบ โดยพระเจ้าฉันหวังว่าจะมีอย่างใดอย่างหนึ่ง คุณไม่ใช่คนเดียวที่มีปัญหานี้
Tonny

8
vertoe, อย่าได้รับ snippy คุณสามารถขอวิธีส่งผ่านลงบนกระดาษแผ่นเล็ก ๆ ได้ แต่นั่นไม่ได้หมายความว่ามีวิธีดังกล่าวอยู่โดยอัตโนมัติ read_x ใช้ได้ แต่ก็ยังแสดงข้อความรหัสผ่านผ่านเช่นpsดังนั้นจึงไม่ดีไปกว่าrmโซลูชัน
MadHatter

7
ก่อนที่คุณจะไปและโยน +1 อีกครั้งในคำตอบที่ไม่จริงคำตอบนี้และบ่นว่ามันเป็นไปไม่ได้ผมขอแนะนำให้คุณอ่านคำตอบของ MvG ด้านล่าง
Mark Henderson

19

นี่จะล้างpsเอาท์พุท

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

  • กระบวนการต่างประเทศไม่ควรเล่นซอในหน่วยความจำกระบวนการ
  • หากกระบวนการนี้ขึ้นอยู่กับภูมิภาคนี้สำหรับรหัสผ่านคุณอาจทำลายแอปพลิเคชันของคุณ
  • การทำเช่นนี้อาจทำให้ข้อมูลการทำงานที่คุณมีในกระบวนการนั้นเสียหาย
  • นี่คือการแฮ็กที่บ้า

ตอนนี้คุณจะได้รับแจ้งจากคำเตือนที่น่ากลัวเหล่านี้ psนี้จะล้างเอาท์พุทที่แสดงใน มันจะไม่ล้างประวัติของคุณและจะไม่ล้างประวัติงานทุบตี (เช่นการเรียกใช้กระบวนการเช่นmyprocess myargs &) แต่psจะไม่แสดงข้อโต้แย้งอีกต่อไป

#!/usr/bin/python
import os, sys
import re

PAGESIZE=4096

if __name__ == "__main__":
  if len(sys.argv) < 2:
    sys.stderr.write("Must provide a pid\n")
    sys.exit(1)

  pid = sys.argv[1]

  try:
    cmdline = open("/proc/{0}/cmdline".format(pid)).read(8192)

    ## On linux, at least, argv is located in the stack. This is likely o/s
    ## independent.
    ## Open the maps file and obtain the stack address.
    maps = open("/proc/{0}/maps".format(pid)).read(65536)
    m = re.search('([0-9a-f]+)-([0-9a-f]+)\s+rw.+\[stack\]\n', maps)
    if not m:
      sys.stderr.write("Could not find stack in process\n");
      sys.exit(1)

    start = int("0x"+m.group(1), 0)
    end = int("0x"+m.group(2), 0)

    ## Open the mem file
    mem = open('/proc/{0}/mem'.format(pid), 'r+')
    ## As the stack grows downwards, start at the end. It is expected
    ## that the value we are looking for will be at the top of the stack
    ## somewhere
    ## Seek to the end of the stack minus a couple of pages.
    mem.seek(end-(2*PAGESIZE))

    ## Read this buffer to the end of the stack
    stackportion = mem.read(8192)
    ## look for a string matching cmdline. This is pretty dangerous.
    ## HERE BE DRAGONS
    m = re.search(cmdline, stackportion)
    if not m:
      ## cause this is an example dont try to search exhaustively, just give up
      sys.stderr.write("Could not find command line in the stack. Giving up.")
      sys.exit(1)

    ## Else, we got a hit. Rewind our file descriptor, plus where we found the first argument.
    mem.seek(end-(2*PAGESIZE)+m.start())
    ## Additionally, we'll keep arg0, as thats the program name.
    arg0len = len(cmdline.split("\x00")[0]) + 1
    mem.seek(arg0len, 1)

    ## lastly overwrite the remaining region with nulls.
    writeover = "\x00" * (len(cmdline)-arg0len)
    mem.write(writeover)

    ## cleanup
    mem.close()

  except OSError, IOError:
    sys.stderr.write("Cannot find pid\n")
    sys.exit(1)

เรียกใช้โปรแกรมโดยการบันทึกchmod +xมัน จากนั้นทำ./whatever <pidoftarget> ถ้ามันใช้งานได้มันจะไม่สร้างเอาต์พุต ถ้ามันล้มเหลวมันจะบ่นเกี่ยวกับบางสิ่งและเลิก


18
. . . นี่คือทั้งความคิดสร้างสรรค์และน่ากลัว
voretaq7

EEK! ตอนนี้ฉันกลัว
Janne Pikkarainen

Yikkes นั่นมันสามารถใช้งานได้ ... ฉันไม่แน่ใจว่ามันจะมีบางอย่างที่ AppArmor จับได้หรือไม่ นอกจากนี้ virusscanner สามารถจับสิ่งนี้และทำให้เกิดความเสียหายโดยการปิดกั้นบัญชีที่ละเมิดซึ่งจะเป็น 'ราก' มีมังกรแน่นอน ....
Tonny

@Tonny สำหรับโดเมนที่ได้รับการป้องกัน SELinux จะป้องกันสิ่งนี้ สิทธิ์ Unix พื้นฐานของคุณ (DAC) ไม่มีหัวเรื่องเพียงพอที่จะเสนอการป้องกันใด ๆ จากพฤติกรรมนี้ (อนุญาตให้แก้ไขหน่วยความจำกระบวนการภายใน UID เดียวกัน) อย่างไรก็ตามมันไม่ใช่ข้อผิดพลาด - มันเป็นคุณสมบัติ ฉันเชื่อว่านี่เป็นวิธีที่gdbสามารถปรับเปลี่ยนหน่วยความจำของกระบวนการทำงาน (ด้วยความแม่นยำในการผ่าตัดมากกว่าที่ฉันจะเพิ่ม)
Matthew Ife

11

คุณสามารถส่งผ่านอาร์กิวเมนต์จากไฟล์เข้าถึงได้โดย root หรือผู้ใช้ที่ต้องการหรือไม่

มันเป็นเรื่องใหญ่มากที่จะพิมพ์รหัสผ่านในคอนโซล แต่การขอความช่วยเหลือครั้งสุดท้าย ... เริ่มต้นบรรทัดของคุณด้วยช่องว่างเพื่อไม่ให้ปรากฏในประวัติ


มีตัวเลือกเชลล์ที่เปิดใช้งานได้ แต่ฉันคิดว่ามันไม่ได้เปิดใช้งานโดยค่าเริ่มต้น
heinrich5991

export HISTCONTROL=ignorebothละเว้นทั้งรายการซ้ำและบรรทัดที่มีพื้นที่นำหน้าสำหรับการเข้าสู่ประวัติ เพิ่มลงใน. bashrc หรือ. bash_profile ของคุณ
Andreas

7

อาจใช้งานได้ (?):

darkcoind masternode start `cat password.txt`

3
หรือแม้กระทั่งdarkcoind masternode start `head -1`หากคุณต้องการป้อนรหัสผ่านด้วยตนเอง
kasperd

14
วลีรหัสผ่านยังคงมีให้ผ่านทางpsและยูทิลิตีที่คล้ายกัน
voretaq7

1
การย้ายจากรหัสผ่านแบบธรรมดา.bash_historyไปเป็นรหัสผ่านแบบธรรมดาpassword.txtจะทำให้คุณได้รับสิ่งใด
MikeyB

1
@ MikeyB: มีผู้ชนะเล็กน้อย: คุณจะไม่เปิดเผยโดยบังเอิญในขณะที่ค้นหาประวัติของคุณในขณะที่บางคนกำลังมองข้ามไหล่ของคุณ
MvG

1
@MikeyB คุณสามารถสร้างและลบไฟล์นั้นในแต่ละครั้ง
RiaD

4

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

แม้ว่าการpsเปิดเผยอาจไม่สามารถหลีกเลี่ยงได้ แต่อย่างน้อยคุณสามารถป้องกันไม่ให้รหัสผ่านถูกเขียนลงในไฟล์ประวัติเชลล์

$ xargs darkcoind masternode start

password

CtrlD

ไฟล์ประวัติควรบันทึกเท่านั้นxargs darkcoind masternode startไม่ใช่รหัสผ่าน


2
หรือถ้าคุณกำลังใช้ทุบตีใส่ignorespaceใน$HISTCONTROLและจากนั้นคุณสามารถป้องกันไม่ให้การใด ๆคำสั่งจากไปในประวัติศาสตร์เปลือกโดย prefixing คำสั่งด้วยช่องว่าง
Derobert

3

ดังที่คนอื่นได้กล่าวไว้ดูที่การควบคุมประวัติเชลล์ของคุณเพื่อซ่อนข้อมูลจากประวัติ

แต่สิ่งหนึ่งที่ดูเหมือนไม่มีใครมีข้อเสนอแนะเลยคือการติด/procกับhidepidพารามิเตอร์ ลองปรับเปลี่ยน/procสาย ของคุณ/etc/fstabเพื่อรวมhidepidเช่น:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults,hidepid=2        0       0

2

คุณสามารถป้องกันรหัสผ่านออกจากประวัติเชลล์ของคุณได้โดยการดำเนินการคำสั่งจากกระบวนการเชลล์ใหม่ซึ่งคุณจะยุติทันที ตัวอย่างเช่น:

bash$ sh
sh$ darkcoind masternode start 'correct horse battery staple'
sh$ exit
bash$

ตรวจสอบให้แน่ใจว่าshมีการกำหนดค่าไม่ให้บันทึกประวัติในไฟล์

หลักสูตรนี้ไม่ได้อยู่ที่ปัญหาอื่น ๆ psเช่นรหัสผ่านที่ถูกมองเห็นได้ใน ฉันเชื่อว่ามีวิธีสำหรับdarkcoindตัวโปรแกรมในการซ่อนข้อมูลจากpsแต่นั่นจะทำให้หน้าต่างของช่องโหว่สั้นลงเท่านั้น


1
วลีรหัสผ่านยังคงมีอยู่ผ่านทางpsและยูทิลิตี้ที่คล้ายกัน
voretaq7

3
@ voretaq7: ใช่ตามที่ฉันได้รับการยอมรับอย่างชัดเจนในวรรคสุดท้ายของคำตอบของฉัน
Keith Thompson

3
แน่นอน - คุณเป็นเหยื่อของซุกซน copypasta ในส่วนของฉัน :)
voretaq7

2

สำหรับ Bitcoin คำตอบของผู้พัฒนาอย่างเป็นทางการคือใช้ตัวห่อหลามที่ให้มาในcontrib/bitrpc/bitrpc.py( gitHub ):

มันถามรหัสผ่านในวิธีที่ปลอดภัยถ้าคุณใช้คำสั่งwalletpassphraseเช่น bitcoin-cliไม่มีแผนการที่จะเพิ่มฟังก์ชันการทำงานแบบโต้ตอบเพื่อเป็น

และ:

bitcoin-cli จะยังคงเป็นอยู่และไม่ได้รับฟังก์ชันการทำงานแบบโต้ตอบ

ที่มา: # 2318

ปลดล็อคกระเป๋าเงิน:

$ python bitrpc.py walletpassphrase

เปลี่ยนข้อความรหัสผ่าน:

$ python bitrpc.py walletpassphrasechange

https://github.com/bitcoin/bitcoin/tree/master/contrib/bitrpc

สำหรับ darkcoin มันทำงานได้อย่างเป็นทางการ:

https://github.com/darkcoin/darkcoin/tree/master/contrib/bitrpc

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.