วิธีที่ดีที่สุดในการใช้คีย์ส่วนตัว SSH หลายอันบนไคลเอนต์เดียว


870

ฉันต้องการใช้ไพรเวตคีย์หลายตัวเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ที่แตกต่างกันหรือบางส่วนของเซิร์ฟเวอร์เดียวกัน (การใช้งานของฉันคือการดูแลระบบเซิร์ฟเวอร์การดูแลระบบของ Git และการใช้ Git ปกติภายในเซิร์ฟเวอร์เดียวกัน) ฉันพยายามเพียงวางกุญแจในid_rsaไฟล์เพื่อไม่เกิดประโยชน์

เห็นได้ชัดว่าวิธีที่ง่ายในการทำเช่นนี้คือการใช้คำสั่ง

ssh -i <key location> login@server.example.com 

นั่นค่อนข้างยุ่งยาก

ข้อเสนอแนะใด ๆ เกี่ยวกับวิธีการทำเช่นนี้ได้ง่ายขึ้นเล็กน้อย?


1
ฉันเขียนบทความนี้ในเชิงลึกเกี่ยวกับการกำหนดค่าต่างๆและความแข็งแรง / ข้อบกพร่องของพวกเขา
Raffi

คำตอบ:


1234

จากฉัน.ssh/config:

Host myshortname realname.example.com
    HostName realname.example.com
    IdentityFile ~/.ssh/realname_rsa # private key for realname
    User remoteusername

Host myother realname2.example.org
    HostName realname2.example.org
    IdentityFile ~/.ssh/realname2_rsa  # different private key for realname2
    User remoteusername

และอื่น ๆ


24
ขอบคุณ Randal! ฉันขุดลงไปใน. ssh / config และพบสิ่งนี้: github.com/guides/multiple-github-accounts ชี้ให้ฉันเห็นทิศทางที่ถูกต้อง
Justin

6
นี่เป็นความช่วยเหลือที่ยอดเยี่ยม (นอกเหนือจากstackoverflow.com/a/3828682/169153 ) หากคุณต้องการใช้กุญแจสำหรับอุดรูปฏิบัติตามเอกสารนี้ได้ที่นี่: blog.padraigkitterick.com/2007/09/16/…
Urda

2
ฉันพบว่าโพสต์นี้มีประโยชน์มาก ข้อผิดพลาดอย่างหนึ่งที่ฉันทำเมื่อสร้างไฟล์ปรับแต่งคือฉันใส่ไฟล์. txt ในโฟลเดอร์. ssh แทนที่จะเรียกใช้คำสั่ง "touch" เพื่อสร้างไฟล์ปรับแต่ง
M_x_r

53
โปรดทราบว่าคุณยังสามารถระบุหลายIdentityFileรายการสำหรับเดียวกันHostซึ่งจะพยายามตามลำดับเมื่อเชื่อมต่อ
sschuberth

12
ใช้IdentitiesOnly yesเพื่อป้องกัน ~ / .ssh / id_rsa หรือข้อมูลอื่น ๆ (แต่เดิมเป็นการแก้ไข)
user3338098

369

คุณสามารถสั่ง ssh ให้ลองใช้หลาย ๆ ปุ่มอย่างต่อเนื่องเมื่อทำการเชื่อมต่อ นี่คือวิธี:

$ cat ~/.ssh/config
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_old
IdentityFile ~/.ssh/id_ed25519
# ... and so on

$ ssh server.example.com -v
....
debug1: Next authentication method: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa_old
debug1: read PEM private key done: type RSA
....
[server ~]$

วิธีนี้คุณไม่ต้องระบุว่าคีย์ทำงานกับเซิร์ฟเวอร์ใด มันจะใช้คีย์การทำงานแรก

นอกจากนี้คุณจะป้อนข้อความรหัสผ่านหากเซิร์ฟเวอร์ที่ให้มายินดีรับรหัสเท่านั้น ตามที่เห็นข้างต้น ssh ไม่ได้พยายามขอรหัสผ่าน.ssh/id_rsaแม้ว่าจะมีอยู่ก็ตาม

แน่นอนว่ามันไม่ได้เกินกว่าการกำหนดค่าต่อเซิร์ฟเวอร์เช่นเดียวกับคำตอบอื่น ๆ แต่อย่างน้อยคุณไม่จำเป็นต้องเพิ่มการกำหนดค่าสำหรับทุกเซิร์ฟเวอร์ที่คุณเชื่อมต่อ!


12
นี่เป็นวิธีแก้ปัญหาที่ยอดเยี่ยมสำหรับคำถามที่ถาม แต่ไม่ค่อยตรงกับความต้องการของผู้ถาม สำหรับฉันมันเป็นทางออกที่ถูกต้องและตรงตามความต้องการอย่างสมบูรณ์แบบ "วิธีที่ดีที่สุดในการใช้คีย์ส่วนตัว SSH หลายอันบนไคลเอนต์เดียว"
ลุย

2
ดูเหมือนว่าจะไม่ทำงานภายใต้การประกาศของโฮสต์ในไฟล์กำหนดค่า
Maksim Luzik

29
วิธีนี้ใช้ไม่ได้กับ git ราวกับว่าคุณมีคีย์ github สองตัวกุญแจแรกในรายการนั้นใช้ได้และจะทำงานได้ แต่ github จะบ่นว่าที่เก็บไม่ตรงกัน
Adam Reis

นี่คือวิธีการแบบไดนามิกมากขึ้นใช้งานได้ดีในบางสถานการณ์ ขอบคุณสำหรับสิ่งนี้
gbolo

7
ระวังถ้าคุณมีบางอย่างเช่น fail2ban บนเซิร์ฟเวอร์เหล่านั้น คุณอาจลงเอยในคุกหนึ่งในนั้น ... เนื่องจากความพยายามที่ล้มเหลวที่เกิดจากกุญแจอื่น ...
Piccolo

254

คำตอบจาก Randal Schwartzเกือบช่วยให้ฉันไปตลอดทาง ฉันมีชื่อผู้ใช้ที่แตกต่างกันบนเซิร์ฟเวอร์ดังนั้นฉันจึงต้องเพิ่มคำหลักผู้ใช้ไปยังไฟล์ของฉัน:

Host           friendly-name
HostName       long.and.cumbersome.server.name
IdentityFile   ~/.ssh/private_ssh_file
User           username-on-remote-machine

ตอนนี้คุณสามารถเชื่อมต่อโดยใช้ชื่อที่เป็นมิตร:

ssh friendly-name

คำหลักเพิ่มเติมสามารถพบได้บนหน้าคน OpenSSH หมายเหตุ:คำค้นหาบางรายการอาจมีอยู่ในไฟล์/ etc / ssh / ssh_config ของคุณแล้ว


ถ้าฉันไม่เข้าใจผิดผู้ใช้คุณมักจะระบุโดยตรงใน url เมื่อเชื่อมต่อกับ user @ host
a1an

3
ฉันต้องการใช้คำหลัก 'พอร์ต' ด้วย คำหลักที่น่าสนใจอีกอย่างคือ 'StrictHostKeyChecking'
Ethan

120

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

สมมติว่าคุณชื่อผู้ใช้บัญชีของ บริษัท GitHub เป็น abc1234 และสมมติว่าชื่อผู้ใช้บัญชี GitHub ส่วนตัวของคุณคือ jack1234

และสมมติว่าคุณได้สร้างสองคีย์ RSA คือid_rsa_companyและid_rsa_personal ดังนั้นไฟล์กำหนดค่าของคุณจะมีลักษณะดังนี้:

# Company account
Host company
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company

# Personal account
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal

ตอนนี้เมื่อคุณโคลนที่เก็บ (ชื่อสาธิต)จากบัญชี GitHub ของ บริษัท URL ที่เก็บจะเป็นดังนี้:

Repo URL: git@github.com:abc1234/demo.git

ตอนนี้ในขณะที่ทำgit cloneคุณควรแก้ไข URL ที่เก็บด้านบนเป็น:

git@company:abc1234/demo.git

สังเกตว่าตอนนี้ github.com ถูกแทนที่ด้วยนามแฝง "บริษัท " ตามที่เราได้กำหนดไว้ในไฟล์การกำหนดค่า

ในทำนองเดียวกันคุณต้องแก้ไข clone URL ของที่เก็บในบัญชีส่วนตัวขึ้นอยู่กับนามแฝงที่ให้ไว้ในไฟล์การกำหนดค่า


10
ฉันหวังว่าฉันจะเอาชนะคำตอบนี้ได้มากกว่าหนึ่งครั้ง ... นี่เป็นวิธีที่ถูกต้องในการแก้ไขปัญหาและปลอดภัยกว่าและเร็วกว่าตัวเลือกอื่น ๆ ปรับขนาดได้มากขึ้นด้วย (อนุญาตให้กำหนดคีย์ที่แตกต่างกันสำหรับชื่อโฮสต์เดียวกัน )
guyarad

4
ไม่เสียเวลาอีกต่อไปนี่คือคำตอบ ขอบคุณมาก.
Luis Milanese

2
ฉันหวังว่าฉันจะพบคำตอบนี้ก่อนหน้านี้ ... แต่ดีกว่าไม่สายขอบคุณมาก!
Hildy

2
คำอธิบายที่ดี! ทำงานได้สมบูรณ์แบบสำหรับฉัน และหากคุณลืมโคลน repo ด้วยนามแฝงคุณสามารถแก้ไข URL ระยะไกลของแหล่งกำเนิดได้ในภายหลัง
tkahn

1
จ่าย attencion เท่านั้นเนื่องจากไฟล์กำหนดค่าจะต้องเป็น (chmod 600)
Christiano Matos

105
foo:~$ssh-add ~/.ssh/xxx_id_rsa

ตรวจสอบให้แน่ใจว่าคุณทดสอบก่อนเพิ่มด้วย:

ssh -i ~/.ssh/xxx_id_rsa username@example.com

หากคุณมีปัญหากับข้อผิดพลาดบางครั้งการเปลี่ยนการรักษาความปลอดภัยของไฟล์ช่วย:

chmod 0600 ~/.ssh/xxx_id_rsa

4
นี่เป็นคำตอบสั้น ๆ และสง่างามที่สุดในความคิดของฉัน ทำงานเหมือนจับใจ!
artur

@Bobo คุณสามารถใส่ไว้ใน bashrc หรือ bash_profile ของคุณ (หรืออะไรก็ตามที่เทียบเท่ากับ mac)?
T0xicCode

6
+1 สำหรับ chmod 0600 - ปัญหาการอนุญาตทำให้ฉันไม่สามารถเชื่อมต่อได้
มิตรภาพ

ทำงานเหมือนมนต์เสน่ห์สำหรับฉัน (และอย่าลืมประมาณ 0600 perms)
Dmytro Uhnichenko

1
มาจาก Ubuntu บน Mac และนี่คือสิ่งที่ฉันต้องการ
hariom

42
  1. สร้างคีย์ SSH:

    $ ssh-keygen -t rsa -C <email1@example.com>
    
  2. สร้างanother SSH key:

    $ ssh-keygen -t rsa -f ~/.ssh/accountB -C <email2@example.com>
    

    ตอนนี้กุญแจสาธารณะสองอัน ( id_rsa.pub , accountB.pub ) ควรมีอยู่ใน~/.ssh/ไดเรกทอรี

    $ ls -l ~/.ssh     # see the files of '~/.ssh/' directory 
    
  3. สร้างไฟล์กำหนดค่า~/.ssh/configด้วยเนื้อหาต่อไปนี้:

    $ nano ~/.ssh/config
    
    Host bitbucket.org  
        User git  
        Hostname bitbucket.org
        PreferredAuthentications publickey  
        IdentityFile ~/.ssh/id_rsa  
    
    Host bitbucket-accountB  
        User git  
        Hostname bitbucket.org  
        PreferredAuthentications publickey  
        IdentitiesOnly yes  
        IdentityFile ~/.ssh/accountB  
    
  4. โคลนจากdefaultบัญชี

    $ git clone git@bitbucket.org:username/project.git
    
  5. โคลนจากaccountBบัญชี

    $ git clone git@bitbucket-accountB:username/project.git
    

ดูเพิ่มเติมที่นี่


24

ฉันเห็นด้วยกับ Tuomas เกี่ยวกับการใช้ ssh-agent ฉันต้องการเพิ่มคีย์ส่วนตัวที่สองสำหรับการทำงานและบทช่วยสอนนี้ทำงานได้อย่างมีเสน่ห์สำหรับฉัน

ขั้นตอนดังต่อไปนี้:

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key เช่น ssh-add ~/.ssh/id_rsa
  3. ยืนยันโดย $ ssh-add -l
  4. ทดสอบด้วย$ssh -v <host url>เช่นssh -v git@assembla.com

4
หลังจากใช้มาssh-agentหลายปีฉันเพิ่งเปลี่ยนมาใช้ Gnome gnome-keyringภายในi3wm ของฉัน เหตุผลง่ายๆคือ: Gnome ผู้จัดการพวงกุญแจโดยอัตโนมัติจัดการการเพิ่มและลบคีย์ SSH ssh-addโดยไม่ต้องฉันต้องจำไว้ว่าให้ นอกจากนี้ฉันยังมีรหัสผ่านเดียวเพื่อปลดล็อค (และหมดเวลาในเวลาที่กำหนดเพื่อความปลอดภัย) ให้แต่ละคนของเขาเอง เนื่องจากฉันใช้การตั้งค่า gnome บน Arch มันเป็น plug n play ด้วยการตั้งค่าของฉัน หากคุณต่อต้านคำพังเพยละเว้นความคิดเห็นนี้
eduncan911

@ eduncan911 ฉันยอมรับว่า gnome-keyring มีประโยชน์ แต่มันก็ไม่ได้รองรับ ed25519 keys ดังนั้นสำหรับฉันจึงไม่ใช่ผู้เริ่มต้น อัปเดต: ฉันเห็นจากwiki.archlinux.org/index.php/GNOME/ ......ว่าตอนนี้ใช้เอเจนต์ ssh-agent เพื่อไม่ให้เกิดปัญหาอีกต่อไป
Brian Minton

15

ฉันพบปัญหานี้ซักครู่เมื่อฉันมีสองบัญชี Bitbucket และต้องการเก็บกุญแจ SSH แยกต่างหากสำหรับทั้งสอง นี่คือสิ่งที่ได้ผลสำหรับฉัน

ฉันสร้างการกำหนดค่า SSH แยกกันสองรายการดังนี้

Host personal.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/personal
Host work.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/work

ตอนนี้เมื่อฉันต้องโคลนที่เก็บจากบัญชีงานของฉัน - คำสั่งมีดังนี้

git clone git@bitbucket.org:teamname/project.git

ฉันต้องแก้ไขคำสั่งนี้เป็น:

git clone git@**work**.bitbucket.org:teamname/project.git

ในทำนองเดียวกันคำสั่งโคลนจากบัญชีส่วนตัวของฉันจะต้องมีการแก้ไข

git clone git @ personal .bitbucket.org: ชื่อ / personalproject.git

อ้างอิงลิงค์นี้สำหรับข้อมูลเพิ่มเติม



11

ตอนนี้ด้วย git รุ่นล่าสุดเราสามารถระบุsshCommandในไฟล์ git config ที่เก็บได้

  [core]
      repositoryformatversion = 0
      filemode = true
      bare = false
      logallrefupdates = true
      sshCommand = ssh -i ~/.ssh/id_rsa_user   
   [remote "origin"]
      url = git@bitbucket.org:user/repo.git
      fetch = +refs/heads/*:refs/remotes/origin/*

1

สำคัญ: คุณจะต้องเริ่มต้น ssh-agent

คุณต้องเริ่มต้น ssh-agent (หากยังไม่ได้ใช้งาน) ก่อนที่จะใช้ ssh-add ดังต่อไปนี้:

eval `ssh-agent -s` # start the agent

ssh-add id_rsa_2 # where id_rsa_2 is your new private key file

โปรดทราบว่าคำสั่ง eval เริ่มต้นเอเจนต์บน bash bash บน windows สภาพแวดล้อมอื่นอาจใช้ตัวแปรเพื่อเริ่มต้นเอเจนต์ SSH


1

คุณสามารถสร้างไฟล์การกำหนดค่าชื่อconfigใน~/.sshโฟลเดอร์ของคุณ มันสามารถมี:

Host aws
    HostName *yourip*
    User *youruser*
    IdentityFile *idFile*

สิ่งนี้จะช่วยให้คุณเชื่อมต่อกับเครื่องเช่นนี้

 ssh aws

1

บน Ubuntu 18.04 ไม่มีอะไรให้ทำ

หลังจากสร้างคีย์ ssh ที่ 2 ได้สำเร็จระบบจะพยายามค้นหาคีย์ ssh ที่ตรงกันสำหรับการเชื่อมต่อแต่ละครั้ง

เพื่อให้ชัดเจนคุณสามารถสร้างคีย์ใหม่ด้วยคำสั่งเหล่านี้

# generate key make sure you give it a new name (id_rsa_server2)
ssh-keygen 
# make sure ssh agent is running
eval `ssh-agent`
# add the new key
ssh-add ~/.ssh/id_rsa_server2
# get the public key to add it to a remote system for authentication
cat ~/.ssh/id_rsa_server2.pub

1

คีย์คู่หลายคู่ใน GITHUB

1.0 SSH CONFIG FILE

1.1 สร้าง ~ / .ssh / config

1.2 chmod 600 ~ / .ssh / config (ต้อง)

1.3 อินพุตต่อไปนี้ลงในไฟล์:

เป็นเจ้าภาพพิซซ่า

ชื่อโฮสต์ github.com

PreferredAuthentications publickey # เป็นตัวเลือก

IdentityFile ~ / .ssh / privatekey1

กรณี A: โคลน GIT สดใหม่

ใช้คำสั่งนี้เพื่อคอมไพล์โคลน:

$ git clone git @ pizza: yourgitusername / pizzahut_repo.git

หมายเหตุ: หากคุณต้องการเปลี่ยนชื่อโฮสต์“ พิซซ่า” ของ. ssh / config ในอนาคตให้ไปที่โฟลเดอร์ git cloned, แก้ไข. url / config ไฟล์ url line (ดูกรณี B)

กรณี B: มีโฟลเดอร์ GIT โคลนอยู่แล้ว

2.1 ไปที่โฟลเดอร์โคลนแล้วไปที่โฟลเดอร์. git

2.2 แก้ไขไฟล์กำหนดค่า

2.3 อัปเดต URL จากเก่าเป็นใหม่:

(Old) url = git@github.com:yourgitusername/pizzahut_repo.git    

(New) url = git@pizza:yourgitusername/pizzahut_repo.git


1

สำหรับฉันทางออกเดียวที่ทำงานคือเพียงเพิ่มใน ~/.ssh/config

Host *
  IdentityFile ~/.ssh/your_ssh_key
  IdentityFile ~/.ssh/your_ssh_key2
  IdentityFile ~/.ssh/your_ssh_key3
  AddKeysToAgent yes

your_ssh_key ไม่มีส่วนขยายใด ๆ อย่าใช้ .pub


0

บน Centos 6.5 ที่ใช้งาน OpenSSH_5.3p1, OpenSSL 1.0.1e-fips ฉันแก้ไขปัญหาด้วยการเปลี่ยนชื่อไฟล์กุญแจเพื่อไม่ให้พวกเขาไม่มีชื่อเริ่มต้น ไดเรกทอรี. ssh ของฉันมี id_rsa_foo และ id_rsa_bar แต่ไม่มี id_rsa ฯลฯ


และปุ่มต่างๆจะถูกนำไปใช้อย่างไร? มีการตรวจจับอัตโนมัติหรือไม่?
robsch

ดูคำตอบของ Randal Schwartz สำหรับวิธีการเลือกคีย์ที่ถูกต้องสำหรับโฮสต์stackoverflow.com/questions/2419566/ ที่
Chris Owens

0

ในฐานะที่เป็น mentionend บนหน้าบล็อก Atlassian สร้างการตั้งค่าภายใน.sshรวมถึงข้อความต่อไปนี้:

#user1 account
 Host bitbucket.org-user1
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user1
     IdentitiesOnly yes

 #user2 account
 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user2
     IdentitiesOnly yes

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


0

คุณสามารถลองแพ็กเกจนี้ sshmulti npm สำหรับการดูแลรักษาคีย์ ssh หลายอัน


ฉันขอแนะนำไม่ควรใช้ npm สำหรับสิ่งนี้ มันมีน้ำตกของการพึ่งพาซึ่งในการตรวจสอบสั้น ๆ รวมถึงช่วงของนักพัฒนาโดดเดี่ยวหมาป่าแพคเกจอายุหลายปี หน้า sshmulti npm นั้นประกาศว่ายังไม่ได้ทดสอบ
Jack Wasey

0

นี่คือทางออกที่ฉันใช้โดยได้แรงบันดาลใจจากคำตอบของ @ sajib-khan การตั้งค่าเริ่มต้นไม่ได้ถูกตั้งค่ามันเป็นบัญชีส่วนตัวของฉันใน gitlab และอีกอันที่ระบุคือบัญชี บริษัท ของฉัน นี่คือสิ่งที่ฉันทำ:

สร้างคีย์ ssh

ssh-keygen -t rsa -f ~/.ssh/company -C "name.surname@company.com"

แก้ไขการกำหนดค่า ssh

nano ~/.ssh/config

    Host company.gitlab.com
    HostName gitlab.com
    PreferredAuthentications publickey  
    IdentityFile ~/.ssh/company

ลบคีย์ ssh แคช

ssh-add -D

ทดสอบ!

ssh -T git@company.gitlab.com

ยินดีต้อนรับสู่ GitLab, @ hugo.sohm!

ssh -T git@gitlab.com

ยินดีต้อนรับสู่ GitLab @HugoSohm!

ใช้มัน !

บัญชี บริษัท

$ git clone git@company.gitlab.com:group/project.git

บัญชีส่วนตัว / ค่าเริ่มต้น

$ git clone git@gitlab.com:username/project.git

นี่คือแหล่งข้อมูลที่ฉันใช้หวังว่ามันจะช่วยได้!


0

ฉันชอบวิธีการตั้งค่าต่อไปนี้ใน ~ / .ssh / config:

# Config for Github to support multiple Github keys
Host  github.com
  HostName github.com
  User git
# UseKeychain adds each keys passphrase to the keychain so you don't have to enter the passphrase each time.
  UseKeychain yes
# AddKeysToAgent would add the key to the agent whenever it is used, which might lead to debugging confusion since then sometimes the one repo works and sometimes the other depending on which key is used first.
#  AddKeysToAgent yes
# I only use my private id file so all private repos don't need the env var `GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa"` to be set.
  IdentityFile ~/.ssh/id_rsa

จากนั้นใน repo ของคุณคุณสามารถสร้าง.envไฟล์ที่มีคำสั่ง ssh ที่จะใช้:

GIT_SSH_COMMAND="ssh -i ~/.ssh/your_ssh_key"

หากคุณใช้เช่นdotenv var สิ่งแวดล้อมจะถูกส่งออกโดยอัตโนมัติและโห่ร้องโห่คุณสามารถระบุคีย์ที่คุณต้องการต่อโครงการ / ไดเรกทอรี ระบบจะขอรหัสผ่านเพียงครั้งเดียวเนื่องจากมีการเพิ่มในพวงกุญแจ

โซลูชันนี้ทำงานได้อย่างสมบูรณ์แบบด้วยคอมไพล์และออกแบบมาเพื่อทำงานบน Mac (เนื่องจากUseKeychain)

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