Chạy SSH Agent khi khởi động Git Bash trên Windows


152

Tôi đang sử dụng git bash. tôi phải dùng

eval `ssh-agent.exe`
ssh-add /my/ssh/location/

mỗi khi tôi bắt đầu một git bash mới.

Có cách nào để thiết lập ssh agent vĩnh viễn? Hoặc các cửa sổ có một cách tốt để quản lý các phím ssh?

Tôi là một chàng trai mới, xin vui lòng cho tôi hướng dẫn chi tiết, cảm ơn!


3
là tương đương /my/ssh/location/với một cái gì đó như thế /c/Users/Foobar/.ssh/nào?
Nick

Một vấn đề tương tự đã được đăng tại superuser.com/q/1238486/478378 đã được giải quyết ngay bây giờ. Các ý chính sau đây chứa tất cả các chi tiết gist.github.com/jiggneshhgohel/afe96f0d57bdbf8beba305a73905402d . Cảm ơn.
Jignesh Gohel

Câu trả lời:


138

Trong một phiên git bash, bạn có thể thêm một kịch bản để ~/.profilehoặc ~/.bashrc( với ~bị thường được thiết lập để%USERPROFILE% ), theo thứ tự cho phiên nói với phóng tự động ssh-agent. Nếu tập tin không tồn tại, chỉ cần tạo nó.

Đây là những gì GitHub mô tả trong " Làm việc với cụm mật khẩu khóa SSH ".

Phần " Tự động khởi chạy ssh-agent trên Git cho Windows " của bài viết đó có một kịch bản mạnh mẽ để kiểm tra xem tác nhân có chạy hay không. Dưới đây chỉ là một đoạn trích, xem bài viết GitHub để biết giải pháp đầy đủ.

# This is just a snippet. See the article above.
if ! agent_is_running; then
    agent_start
    ssh-add
elif ! agent_has_keys; then
    ssh-add
fi

Các nguồn lực khác:

" Bắt ssh-agent hoạt động với git chạy từ shell lệnh windows " có một kịch bản tương tự, nhưng tôi chủ yếu đề cập đến bài viết GitHub ở trên, mạnh mẽ và cập nhật hơn.


Một phiền toái nhỏ mà tôi gặp phải là nếu tôi biết tôi sẽ không sử dụng git, tôi sẽ không nhập mật khẩu khóa ssh, sau đó mọi vỏ tôi mở ra đều yêu cầu lại. Đây là trạng thái 1, tác nhân đang chạy khóa w / o, vì vậy bạn có thể xóa ssh-add khỏi phần này sau đó nếu bạn không nhập cụm mật khẩu của mình lần đầu tiên xung quanh bạn sẽ không được hỏi lại cho đến khi bạn chạy ssh-add theo cách thủ công.
Andy2K11

@Gordon Phần nào trong trợ giúp đó.github.com/articles/usiness-with-ssh-key-passph cụm liên kết GitHub đã thay đổi? Nội dung của nó vẫn còn đó, và dường như vẫn có liên quan cho câu trả lời này.
VonC

1
@ Andy2K11 Nếu bạn muốn nhập cụm mật khẩu vào lần đầu tiên bạn cần và không phải khi mở shell, cách sạch nhất với tôi là xóa ssh-add khỏi .bash_profile, như bạn đã đề cập và thêm "AddKeysToAgent yes" vào tập tin .ssh / config của bạn (xem câu trả lời này: superuser.com/a/1114257/523133 ). Bằng cách này, bạn thậm chí không phải nhớ chạy ssh-add.
17/12/18

30

PS: Các hướng dẫn này nằm trong ngữ cảnh của Bash shell được mở trong Windows 10 Linux Subystem và không đề cập đến các khóa SSH liên kết được tạo trong Windows với Bash trên Ubuntu trên Windows

1) Cập nhật .bashrc của bạn bằng cách thêm vào sau trong đó

# Set up ssh-agent
SSH_ENV="$HOME/.ssh/environment"

function start_agent {
    echo "Initializing new SSH agent..."
    touch $SSH_ENV
    chmod 600 "${SSH_ENV}"
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' >> "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    kill -0 $SSH_AGENT_PID 2>/dev/null || {
        start_agent
    }
else
    start_agent
fi

2) Sau đó chạy $ source ~/.bashrcđể tải lại cấu hình của bạn.

Các bước trên đã được thực hiện từ https://github.com/abergs/ubfoxonwindows#2-start-an-bash-ssh-agent-on-launch

3) Tạo tập tin cấu hình SSH, nếu không có. Sử dụng lệnh sau để tạo một cái mới:.ssh$ touch config

4) Thêm vào sau ~/.ssh/config

Host github.com-<YOUR_GITHUB_USERNAME> 
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes


Host csexperimental.abc.com
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes

<More hosts and github configs can be added in similar manner mentioned above>

5) Thêm khóa của bạn vào tác nhân SSH bằng lệnh $ ssh-add ~/.ssh/id_work_gmailvà sau đó bạn sẽ có thể kết nối với tài khoản github hoặc máy chủ từ xa bằng ssh. Ví dụ: trong bối cảnh của các ví dụ mã ở trên:

$ ssh github.com-<YOUR_GITHUB_USERNAME>

hoặc là

$ ssh <USER>@csexperimental.abc.com

Việc thêm khóa này vào tác nhân SSH chỉ được yêu cầu thực hiện một lần.

6) Bây giờ hãy đăng xuất phiên Bash của bạn trên Hệ thống con Windows Linux, tức là thoát lại tất cả các bàn điều khiển Bash và khởi động lại bàn điều khiển mới và thử SSH vào Máy chủ Github của bạn hoặc máy chủ khác như được định cấu hình trong tệp cấu hình SSH và nó sẽ hoạt động mà không cần thêm bất kỳ các bước.

Ghi chú:

Cảm ơn.


1
Thay thế thú vị, sử dụng WSL. +1
VonC

@JigneshGohel Cảm ơn bạn, kịch bản này là hoàn hảo và v. Sạch sẽ! Tôi chỉ tự hỏi mặc dù, tại sao bạn có >> "${SSH_ENV}"? Không phải là nó nên > "${SSH_ENV}"? Bạn làm việc, tất nhiên, nhưng nó chỉ kết thúc với một ~/.ssh/environmenttập tin chậm hơn và dài hơn , vì (như tôi hiện đang nghĩ!?) Không có lý do ... Mặc dù vậy, rất nhiều cảm ơn! Tôi cảm thấy tập lệnh này chỉ nên được đưa vào mặc định .bashrccho WSL Ubuntu, nó rất hữu ích!
MikeBeaton

5

Tôi đã tìm thấy cách dễ dàng nhất để đạt được điều này là sử dụng Pagete làm tác nhân SSH và plink.

Bạn cần phải có một phiên putty được cấu hình cho tên máy chủ được sử dụng trong điều khiển từ xa của bạn.

Bạn cũng sẽ cần plink.exe có thể được tải xuống từ cùng một trang với putty.

Và bạn cần Pagete chạy với khóa của bạn được tải. Tôi có một lối tắt đến cuộc thi trong thư mục khởi động tải khóa SSH của tôi khi tôi đăng nhập.

Khi bạn cài đặt git-scm, sau đó bạn có thể chỉ định nó để sử dụng rùa / plink thay vì OpenSSH.

Hiệu ứng ròng là bạn có thể mở git-bash bất cứ khi nào bạn muốn và đẩy / kéo mà không bị thách thức đối với cụm mật khẩu.

Áp dụng tương tự với các phiên putty và WinSCP khi cuộc thi đã tải khóa của bạn. Nó làm cho cuộc sống trở thành một địa ngục dễ dàng hơn nhiều (và an toàn).


2

Vì tôi không thích sử dụng putty trong Windows như một cách giải quyết, tôi đã tạo ra một tiện ích ssh-agent-Wrapper rất đơn giản . Nó quét các thư mục .ssh của bạn và thêm tất cả các khóa của bạn vào tác nhân. Bạn chỉ cần đặt nó vào thư mục khởi động Windows để nó hoạt động.

Giả định :

  • đại lý ssh trong đường dẫn
  • shh-add in path (cả hai bằng cách chọn tùy chọn "ĐỎ" khi cài đặt git
  • Khóa riêng nằm trong thư mục% USERPROFILE% /. ssh
  • Tên khóa riêng bắt đầu bằng id (ví dụ: id_rsa)

Đẹp! +1. Tôi luôn làm việc với openssh (không phải putty), vì vậy đây là một giải pháp thú vị cho các khóa riêng với cụm mật khẩu.
VonC

Như bạn đã có trên github rồi, vậy tại sao không biến nguồn thành một kho git?
Thorbjørn Ravn Andersen

Chỉ cần loại bỏ / phát hành từ đường dẫn. ;-)
Erez A. Korn

1

Tôi không thể làm điều này để làm việc dựa trên câu trả lời tốt nhất, có lẽ bởi vì tôi là một người máy tính và thiếu một cái gì đó rõ ràng. Nhưng chỉ cần FYI trong trường hợp nó giúp một người thách thức như tôi, những gì CUỐI CÙNG đã làm việc là thông qua một trong các liên kết ở đây (được tham khảo trong các câu trả lời). Điều này liên quan đến chỉ đơn giản là dán sau đây của tôi .bash_profile:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

Tôi có thể có một cái gì đó được cấu hình kỳ lạ, nhưng không thành công khi tôi thêm nó vào .profilehoặc .bashrc. Thách thức thực sự khác mà tôi gặp phải là tôi không phải là quản trị viên trên máy tính này và không thể thay đổi các biến môi trường mà không được IT chấp thuận, vì vậy đây là giải pháp cho những người không thể truy cập được.

Bạn biết nó hoạt động nếu bạn được nhắc nhập mật khẩu ssh khi bạn mở git bash. Hallelujah một cái gì đó cuối cùng đã làm việc.


1

Đặt cái này trong ~ / .bashrc của bạn (hoặc một tệp có nguồn từ nó) sẽ ngăn nó chạy nhiều lần không cần thiết trên mỗi shell:

if [ -z "$SSH_AGENT_PID" ]; then
        eval `ssh-agent -s`
fi

Và sau đó thêm "AddKeysToAgent yes" vào ~ / .ssh / config:

Host *
    AddKeysToAgent yes

ssh đến máy chủ của bạn (hoặc git pull) bình thường và bạn sẽ chỉ được yêu cầu nhập mật khẩu / cụm mật khẩu một lần mỗi phiên.


0

Tạo một cái mới tệp .bashrc trong thư mục ~ của bạn.

Ở đó bạn có thể đặt các lệnh mà bạn muốn thực hiện mỗi khi bạn bắt đầu bash


Nó phải làm việc. Hãy thử đặt một cái gì đó đơn giản vào .bashrctập tin như vậy (thích echo testvà kiểm tra xem nó có được tải khi bạn thực thi Git Bash không
David Ferenczy Rogožan

Cũng lưu ý rằng ~ trong PowerShell có thể khác với ~ trong Git Bash / Cygwin tùy thuộc vào phiên bản nào đã được cài đặt và các tùy chọn người dùng được chỉ định.
dragon788

@Yar Trên Windows, hãy đặt .bashrctrong thư mục người dùng của bạn, vd C:\Users\john.
Martin van Driel

0

Giải pháp hai chuỗi đơn giản từ câu trả lời này :

Đối với sh , bash , vv

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

Đối với csh , tcsh , v.v .:

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`
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.