Làm cách nào để tránh bị hỏi mật khẩu mỗi lần tôi đẩy sang Bitbucket


217

Tôi đã thiết lập công cụ ssh của mình với sự trợ giúp của hướng dẫn này và nó đã hoạt động tốt (tôi có thể chạy hg pushmà không cần yêu cầu cụm mật khẩu). Điều gì có thể xảy ra giữa lúc đó và bây giờ, vì tôi vẫn đang sử dụng cùng một thư mục chính.

$ cat .hg/hgrc 
[paths]
default = ssh://hg@bitbucket.org/tshepang/bloog

$ hg push
Enter passphrase for key '/home/wena/.ssh/id_rsa': 
pushing to ssh://hg@bitbucket.org/tshepang/bloog
searching for changes
...

Câu trả lời:


337

Bạn cần sử dụng một đại lý ssh. Câu trả lời ngắn: thử

$ ssh-add

trước khi đẩy. Cung cấp mật khẩu của bạn khi được hỏi.

Nếu bạn chưa chạy tác nhân ssh, bạn sẽ nhận được thông báo sau:

Could not open a connection to your authentication agent.

Trong tình huống đó, bạn có thể bắt đầu một và thiết lập môi trường của mình như vậy

eval $(ssh-agent)

Sau đó lặp lại ssh-addlệnh.

Thật đáng để xem qua trang web của đại lý ssh .


2
Điểm evalbạn có thể gõ là ssh-agentgì?
James McMahon

4
Nó hiển thị một số lệnh cho phép bạn sử dụng nó và không thực thi chúng cho bạn; evalkhông cắt bỏ.
tshepang

Không liên quan đến câu hỏi ban đầu nhưng nếu bạn tiếp tục gặp những vấn đề này trên GitHub, Bitbucket, v.v., hãy đảm bảo bạn đang sử dụng URL git / ssh, không phải http, sẽ tiếp tục hỏi tên người dùng + mật khẩu.
Công nghệ

Và nếu bạn không có khóa mặc định hoặc muốn thêm bội số,ssh-add /path/to/key
hoosierEE

46

Một cách để giải quyết điều này là với ssh-agentssh-add:

$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa: 

Sau đó, cụm mật khẩu được lưu cho phiên hiện tại. và sẽ không được hỏi lại.


7
Hầu hết mọi người không muốn bị lỗi vì cụm từ vượt qua của họ cả.
Connexo

26

Tôi sử dụng Keychain để quản lý khóa ssh. Nó cũng có sẵn trong Debian và có lẽ là Ubuntu với

apt-get install keychain

Đây là trang gói móc khóa Debian . Như bạn có thể thấy, dự án không hoạt động nhiều, nhưng hoạt động với tôi. Tôi cũng đã bình luận một chút về điều này trong một câu trả lời khác ở đây


2
//, Điều này làm việc cho tôi. Cách này tốt hơn ssh-agent, vì tôi không cần nhập mật khẩu khóa ssh mỗi khi tôi mở terminal .
Nathan Basan

@NathanBasane có phải bạn đang nói rằng sử dụng móc khóa bạn không cần nhập mật khẩu khóa ssh mỗi khi bạn mở terminal? Làm thế nào để bạn cấu hình đó? bởi vì móc khóa cứ hỏi mật khẩu mỗi khi tôi mở terminal, chỉ lần đầu tiên tôi mở nó sau khi khởi động, nhưng vẫn vậy. Tôi không muốn nhập cụm mật khẩu mỗi lần.
m4l490n

@ m4l490n Không, nếu bạn đang sử dụng móc khóa, bạn không cần nhập mật khẩu khóa ssh mỗi khi mở thiết bị đầu cuối. Nhưng bạn cần phải nhập nó một lần sau khi khởi động. Cụm mật khẩu không được lưu vào đĩa - điều đó sẽ không an toàn.
Faheem Mitha

Đối với tôi, nó hỏi mỗi lần tôi đăng nhập (tôi có kho git + khóa ssh trong máy chủ từ xa và mỗi khi tôi thực hiện "git pull" tôi cần nhập cụm mật khẩu)
Martin Thoma

@MartinThoma Điều đó có vẻ sai. Kiểm tra xem bạn đã cấu hình .ssh chính xác chưa. Cụ thể, vỏ của bạn có được cấu hình đúng không? Nếu nó vẫn không hoạt động cho bạn và bạn không thể tìm ra nó, bạn có thể đặt câu hỏi.
Faheem Mitha

13

Tạo (hoặc chỉnh sửa nếu nó tồn tại) tệp ~ / .ssh / config sau đây:

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa

Nhưng tôi đang sử dụng một cặp khóa khác nhau cho mỗi dịch vụ ...
Connexo

@connexo bạn có thể thay thế dấu hoa thị ký tự đại diện bằng tên máy chủ cá nhân và 'id_rsa' bằng khóa riêng tương ứng của mình
ness-EE

1
Tôi cần phải thêm IgnoreUnknown AddKeysToAgent,UseKeychainở trên UseKeychain yes.
consideRatio

1
Tôi đang gặp lỗi này: "Tùy chọn cấu hình xấu: usekeychain" trên dòng "UseKeychain yes".
m4l490n

@ m4l490n: có vẻ như UseKeychaintùy chọn đã được thêm vào trong OpenSSH 7.1p2 (2016 / 02-28). Có lẽ bạn có một phiên bản trước. openssh.com/txt/release-7.2
chus

6

Để thuận tiện, phương pháp tối ưu là sự kết hợp giữa câu trả lời của jmtdFaheem .

Sử dụng ssh-agentmột mình có nghĩa là một thể hiện mới của ssh-agentnhu cầu được tạo cho mỗi thiết bị đầu cuối mới mà bạn mở. keychainkhi khởi tạo sẽ yêu cầu cụm mật khẩu cho (các) khóa riêng và lưu trữ nó. Bằng cách đó, khóa riêng của bạn được bảo vệ bằng mật khẩu nhưng bạn sẽ không phải nhập lại mật khẩu nhiều lần.

Các Arch wiki khuyến cáo khởi keychain từ /etc/profile.d/hoặc hồ sơ shell của bạn, chẳng hạn như .bash_profilehay .bashrc. Điều này có một nhược điểm ở chỗ nó thâm nhập vào móc khóa của bạn ngay khi bạn mở một thiết bị đầu cuối.

Một cách tiếp cận linh hoạt hơn là kết hợp keychainvới một tmuxphiên cụ thể . Vì vậy, trong .bash_profile:

tsess=$(tmux ls 2>&1)

if [[ "${tsess%%:*}" = "secured" ]] && 
   [[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
    # start keychain
    /usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
    . $HOME/.keychain/$HOSTNAME-sh
fi

... Và sau đó, đây chỉ là trường hợp bắt đầu tmuxphiên bảo mật theo yêu cầu (được khởi chạy từ bàn phím):

#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"

if [[ -z "$SSH_AUTH_SOCK" ]]; then
    eval `ssh-agent`
    trap "kill $SSH_AGENT_PID" 0
fi

if [[ -z "$PID" ]]; then
    urxvtc -title "SSH" -e sh -c "${new}"
else
    urxvtc -title "SSH" -e sh -c "${old}"
fi

ssh-add

Bây giờ, móc khóa của bạn sẽ chỉ được khởi tạo một lần khi bạn bắt đầu tmuxphiên cụ thể đó. Miễn là phiên đó vẫn tồn tại, bạn sẽ có thể truy cập các sshkhóa đó và đẩy vào kho lưu trữ từ xa.


Làm thế nào tôi có thể làm điều này để làm việc trên một máy từ xa? Tôi đã sửa đổi tập lệnh thứ hai để kiểm tra $ SSH_CLIENT và nếu nó tồn tại, đừng thực thi urxvtc, chỉ cần tmux. Điều đó hoạt động, nhưng vấn đề là phần .bash_profile. Khi tôi đăng nhập lần đầu vào hộp, nó báo "không tìm thấy máy chủ: Kết nối bị từ chối", đó là đầu ra của "tmux ls". Sau đó, khi tôi thực thi tập lệnh thứ hai, tmux sẽ bắt đầu một phiên mới hoặc đính kèm với tập lệnh hiện có, nhưng không có dấu nhắc móc khóa. Sau đó, khi tôi thoát phiên, dấu nhắc móc khóa ở đó chờ.
jonyamo

Tôi đã cập nhật câu trả lời để tắt đầu ra tmux nếu không có phiên.
jasonwryan

Cảm ơn bạn, nhưng điều đó vẫn không giải quyết được vấn đề với móc khóa. tmux tạo phiên mới nhưng đi thẳng đến bất kỳ dấu nhắc trống nào. Chỉ khi tôi thoát khỏi phiên tmux, tôi mới thấy dấu nhắc móc khóa yêu cầu cụm mật khẩu của mình.
jonyamo

Tôi đoán tôi nên ngừng nói móc khóa, vì móc khóa chỉ được thực hiện trong .bash_profile. Vấn đề là từ việc thực thi ssh-add. Mặc dù, nếu tôi chạy ssh-add thủ công sau khi tạo phiên tmux, nó vẫn hoạt động.
jonyamo

1
Bỏ qua tập lệnh thứ hai và chỉ bắt đầu phiên tmux được bảo mật của bạn từ .profileđó - bằng cách đó bạn sẽ nhận được lời nhắc cho các khóa ngay khi bạn đăng nhập.
jasonwryan

0

Bạn có thể sử dụng sshpass:

$ sudo apt-get install sshpass
$ sshpass -p 'password' ssh username@server

Bạn chỉ cần thêm sshpass -p yourpassphrasetrước khi nối thêm sshlệnh thông thường của bạn .


2
Nghe có vẻ là một ý tưởng thực sự ngu ngốc. Điều đó có làm cho mật khẩu của bạn hiển thị dưới dạng văn bản rõ ràng trong lịch sử trình bao của bạn không?
Connexo

Chính xác, nhưng bạn không có nghĩa vụ bảo vệ phiên của bạn bằng mật khẩu?
belka

1
Ngay cả khi bạn làm, bạn có thường xuyên có một đồng nghiệp ngồi bên cạnh và giúp bạn / học hỏi từ bạn không?
Connexo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.