원격 호스트에서 ssh 작업을 수행 할 때“키 암호 입력”메시지가 표시되지 않도록하는 방법은 무엇입니까?


43

나는 원격 호스트 (linux, fedora)에 ssh이고 거기에서 ssh operation (git with bitbucket)을하고 싶습니다. 해당 머신에서 ssh-agent가 실행 중입니다.

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

하지만 git을하고 싶다면 암호를 입력해야합니다.

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

참고 : 해당 컴퓨터에서 로컬로 작업하는 경우 암호를 입력하라는 메시지가 표시되지 않습니다


1
나는 그것을 사용하지 않은하지만 난 그런 종류의에 사용되는 생각 명령 SSH-추가있다
barlop

답변:


80

내 의견으로는 ssh를 사용하는 가장 좋은 방법

Git을 사용하기 전에 ssh-agent에 키를 추가하십시오

시작 되지 않은 경우 ssh-agent를 시작하십시오.

$ 평가 `ssh-agent -s`

ssh-add를 사용 하여 개인 키 추가

$ ssh-add ~ / .ssh / id_rsa_key
/home/user/.ssh/id_rsa_key의 암호를 입력하십시오 :
아이디 추가 : /home/user/.ssh/id_rsa_key
(/home/user/.ssh/id_rsa_key)

키가 추가되었는지 확인하십시오 (매개 변수는 소문자 L입니다).

$ ssh-add -l
2048 55 : 96 : 1a : b1 : 31 : f6 : f0 : 6f : d8 : a7 : 49 : 1a : e5 : 4c : 94 : 6f
/home/user/.ssh/id_rsa_key(RSA)

Git 서버에 연결하십시오 :

$ ssh git.example.com

이제 추가적인 암호 문구없이 Git을 사용할 수 있습니다.

다른 방법들

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt


하지만 Git을 사용하여 ssh-agent에 키를 추가 한 다음 어떻게해야합니까? 고마워
백합

@lily 죄송합니다. 귀하의 질문을 이해하지 못합니다.
로마

1
이것은 나를 위해 일한 솔루션입니다.
Skatox

2
이것을 어떻게 지속합니까? 간단히 넣 .bashrc습니까?
oarfish

1
참고로, evalSSH_AUTH_SOCK와 같은 환경 변수를 내보내는 명령을 출력하기 때문에 필요합니다. unix.stackexchange.com/questions/351725/…
wisbucky

21

이미 ssh-agent실행중인 경우 키를 추가 할 수 있으며 해당 세션에 대해 암호를 한 번만 입력해야합니다.

ssh-add ~/.ssh/id_rsa

사용중인 OS는 말하지 않지만 Linux & Gnome 인 경우 "비밀번호 및 키"애플리케이션 (CLI 이름 :)은이를 seahorse관리 할 수 ​​있으므로 로그인 할 때 잠금이 해제됩니다 (비밀번호 필요 없음) . 다른 Linux 데스크탑 환경에는 자체 관리자가 있습니다. 다른 OS가 무엇을하는지 잘 모르겠습니다.


3

암호 구문의 주된 이유는 키가 암호화되어 있기 때문에 다음 두 가지를 비교하십시오.

  • 암호화되지 않은

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • 암호화

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

따라서 다음 중 하나를 수행해야합니다.

  1. 암호화 된 경우 를 제거 .
  2. 잘못된 키를 사용하고 있습니다. 다른 키를 사용하려면 다른 파일을 지정하거나~/.ssh/config 하고 다른 ID 파일 ( IdentityFile)을 지정 .
  3. 운영 ssh-add -l 오른쪽 키를 (그들은 은닉 구성에 존재)를 사용하는 경우 모든 ID를 나열합니다 (다음 해당 지역의 비교) 및 은닉 더블 체크.
  4. 암호를 알고이를 자동화하려면 다음 해결 방법을 시도하십시오.

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

문제 해결:

  1. SSH 에이전트가 실행 중인지 다시 확인하십시오 (eval "$(ssh-agent -s)" ).
  2. 다음을 통해 자식을 다시 실행하십시오. GIT_TRACE=1 git pull 또는 GIT_SSH_COMMAND="ssh -vv"(Git 2.3.0+)를 사용 하여 하여 명령을 다시 디버깅하십시오.
  3. 암호 문구를 요청하는 것을 우회하려고 할 수 true있지만 ( 로 리디렉션됩니다 ) 도움이 될 것이라고 생각하지 않습니다. 요청하면 이유가 있으며 기본적으로 필요합니다.

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    

2

ssh-add프로그램은 시작 에이전트 사용자의 암호를 개최 (및 제공) 할 수 있습니다. 원격으로 사용하는 방법은 대화식 쉘 의 상위 에 있으므로 에이전트가 중지되지 않습니다.

다음은 몇 가지 관련 질문입니다.

이제 ... 원격으로 연결 하면 일반적으로 명령이 로그인되지 않으므로 시작되지 않습니다 ssh-add. 스크립트를 실행하여이 문제를 해결할 수 있습니다.

  • 시작하다 ssh-agent
  • 시작하다 ssh-add
  • 열쇠를 추가합니다
  • 원하는 명령을 실행합니다.

약점은 두 번째 단계입니다. 암호 가없는 키를 사용하여 보안약화 시키지 않으면 암호 문구를 입력하라는 메시지 가 계속 표시됩니다 . 어떤 사람들은 이것을하고 대부분의 사람들은 반대합니다.


ssh-add에이전트를 시작하지 않습니다. 이미 실행중인 에이전트에 연결합니다.
AMS

감사합니다-별도의 스크립트 에서이 작업을 수행하는 데 익숙하며 누락 된 부분을 간과했습니다.
Thomas Dickey

0

다음 명령을 사용하여 키 암호를 쉽게 제거 할 수 있습니다

ssh-keygen -p

첫 번째 프롬프트에서 파일 경로를 입력하거나 Enter 키를 눌러 기본값을 변경하십시오. 두 번째 프롬프트에서 이전 비밀번호 문구를 입력하십시오. 다음 프롬프트에서 Enter를 눌러 비밀번호 문구를 설정 해제하십시오.

이것이 가장 쉬운 방법 인 것 같습니다!


0

ssh-agent해당 SSH 공개 키가 원격에 추가 될 때까지 개인 키를로드하더라도 암호를 묻는 프롬프트가 계속 표시됩니다~/.ssh/authorized_keys .

재현하려면 :

# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys

$ eval $(ssh-agent)
# Agent pid 9290

$ ssh-add
# Enter passphrase for /home/uvsmtid/.ssh/id_rsa: 
# Identity added: /home/uvsmtid/.ssh/id_rsa (/home/uvsmtid/.ssh/id_rsa)

$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
  # NOTE: See password prompt for private key
  #       (and only then prompt for remote login).
  #       Why? Isn't the private key is already loaded by `ssh-add`?

$ ssh-copy-id localhost
$ ssh localhost
  # NOTE: No password for private key anymore.
  #       The key is served by `ssh-agent`.

충분히 혼란 스럽습니다. 이 경우 원격 SSH 로그인 비밀번호로 충분합니다.

이렇게하면 해당 개인 키의 암호화 암호를 몰라도 공개 키 (암호화 된 개인 키와 쌍을 이루는)를 추가 할 수 없다고 추측 할 수 있습니다. 어쨌든 원격 로그인 당 한 번의 로그인 절차입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.