암호 프롬프트없이 ssh-add를 자동으로 실행하려면 어떻게해야합니까?

SSH를 통해 네트워크 (고정 이더넷)의 여러 컴퓨터간에 통신하고 싶습니다. 이렇게하려면 특정 컴퓨터에 로그인 할 때마다 ssh-add를 실행해야합니다. “한 번 설정되고 로그인 할 때마다 암호를 묻지 않도록하려면 어떻게해야합니까?” 아니면 내 컴퓨터를 재부팅 하시겠습니까?

bash_profile 파일에 몇 줄을 추가해야하는 방법이 있다는 것을 알고 있지만 여전히 매번 비밀번호를 입력해야합니다. 특정 컴퓨터로 재부팅 / 로그인 할 때입니다.

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

댓글

답변

이것은 보안 간의 상충 관계의 전형적인 예입니다. 그리고 편리합니다. 다행히도 여러 가지 옵션이 있습니다. 가장 적절한 솔루션은 사용 시나리오와 원하는 보안 수준에 따라 다릅니다.

ssh-key with passphrase, no ssh-agent

이제 인증에 키를 사용할 때마다 암호를 입력해야합니다. 이것은 보안 관점에서 가장 좋은 옵션이지만 최악의 사용성을 제공합니다. 또한 반복적으로 입력하는 부담을 줄이기 위해 약한 암호가 순서대로 선택 될 수 있습니다.

암호가있는 ssh-key, ssh-agent

~/.bash_profile에 다음을 추가하면 자동으로 시작됩니다. ssh-agent 및 로그인시 ssh-key (s)로드 :

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

이제 암호를 매번 입력해야합니다. 로그인. 사용성 측면에서는 약간 더 좋지만 로그인 세션 중에 키를 사용할지 여부에 관계없이 ssh-agent에서 암호를 묻는 단점이 있습니다. 또한 각각의 새로운 로그인은 명시 적으로 종료되지 않는 한 로그 아웃 후에도 메모리에 추가 된 키와 함께 실행되는 고유 한 ssh-agent 인스턴스를 생성합니다.

ssh_agent 로그 아웃시 다음을 ~/.bash_logout

if [ -n "$SSH_AUTH_SOCK" ] ; then eval `/usr/bin/ssh-agent -k` fi 

에 추가하거나 ~/.bash_profile

trap "test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`" 0 

여러 개의 ssh-agent 인스턴스 생성을 피할 수 있습니다. Collin Anderson의 답변 과 같이 파일 시스템의 고정 된 위치에 에이전트에 대한 영구 통신 소켓을 생성합니다. 이는 여러 에이전트를 생성하는 것보다 개선 된 것입니다. 그러나 명시 적으로 종료하지 않는 한 해독 된 키가 로그 아웃 후에도 메모리에 남아 있습니다.

데스크톱에서 Gnome Keyring SSH Agent 는 일반적으로 패스를 요청하기 위해 만들 수 있으므로 더 나은 접근 방식 일 수 있습니다. 로그인 세션 중에 ssh-key가 처음 사용될 때 문구를 사용하고 세션이 끝날 때까지 복호화 된 개인 키를 메모리에 저장합니다.

ssh- 암호가있는 키, ssh-ident

ssh-ident 는 사용자를 대신하여 ssh-agent를 관리하고 필요에 따라 ID를로드 할 수있는 유틸리티입니다. ssh-agent에 액세스해야하는 터미널, ssh 또는 로그인 세션 수에 관계없이 필요한만큼 키를 한 번만 추가합니다. 또한 연결되는 호스트 또는 ssh가 호출 된 디렉토리에 따라 다른 에이전트와 다른 키 세트를 추가하고 사용할 수 있습니다. 이를 통해 다른 호스트에서 에이전트 전달을 사용할 때 키를 분리 할 수 있습니다. 또한 GitHub와 같은 사이트에서 여러 계정을 사용할 수 있습니다.

ssh-ident를 활성화하려면이를 설치하고 :

alias ssh="/path/to/ssh-ident" 

ssh-key with passphrase, with keychain

keychain 는 사용자를 대신하여 ssh-agent를 관리하고 로그인 세션이 종료 될 때 ssh-agent가 계속 실행되도록하는 작은 유틸리티입니다. 이후 로그인시 keychain는 기존 ssh-agent 인스턴스에 연결됩니다. 실제로 이것은 재부팅 후 처음 로그인 할 때만 암호를 입력해야 함을 의미합니다. 이후 로그인시 기존 ssh-agent 인스턴스의 암호화되지 않은 키가 사용됩니다.이것은 또한 암호없는 SSH 키없이 cron 작업에서 암호없는 RSA / DSA 인증을 허용하는 데 유용 할 수 있습니다.

keychain, 설치하고 다음과 같은 내용을 ~/.bash_profile에 추가합니다.

eval `keychain --agents ssh --eval id_rsa` 

보안 지점에서 보기, ssh-identkeychain는 특정 수명으로 제한된 ssh-agent 인스턴스보다 나쁩니다. 세션이지만 높은 수준의 편의성을 제공합니다. keychain의 보안을 개선하기 위해 일부 사용자는 ~/.bash_profile 키 체인에 --clear 옵션을 추가합니다. 기도. 이렇게하면 위와 같이 로그인 할 때 암호를 다시 입력해야하지만 cron 작업은 사용자가 로그 아웃 한 후에도 여전히 암호화되지 않은 키에 액세스 할 수 있습니다. keychain wiki 페이지 에 자세한 정보와 예제가 있습니다.

암호가없는 ssh-key

보안 관점에서 개인 키가 완전히 보호되지 않기 때문에 최악의 옵션입니다. 노출됩니다. 그러나 이것이 재부팅 후 암호를 다시 입력 할 필요가 없도록하는 유일한 방법입니다.

ssh-key with passphrase, with ssh-agent, 암호 전달 ssh-add 스크립트에서

하지만 스크립트에서 암호를 ssh-add에 전달하는 간단한 아이디어처럼 보입니다. 예 : echo "passphrase\n" | ssh-add, 이것은 ssh-add 가 읽지 않는 것처럼 보이는만큼 간단하지 않습니다. stdin의 암호이지만 /dev/tty 읽기 용으로 직접 열립니다 .

이는 iv id 일 수 있습니다. 대화 형 자동화 도구 인 expect 를 사용하여 = “0404e684e1”>

해결 응용 프로그램. 다음은 스크립트에 저장된 암호를 사용하여 ssh-key를 추가하는 스크립트의 예입니다.

#!/usr/bin/expect -f spawn ssh-add /home/user/.ssh/id_rsa expect "Enter passphrase for /home/user/.ssh/id_rsa:" send "passphrase\n"; expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)" interact 

암호는 일반 텍스트로 저장되므로 보안 관점에서 보면 이것은 암호가없는 ssh-key를 갖는 것보다 낫지 않습니다. 이 접근 방식을 사용하려면 암호를 포함하는 expect 스크립트에 적절한 권한이 설정되어 있는지 확인하여 키로 만 읽기, 쓰기 및 실행할 수 있도록하는 것이 중요합니다. 소유자.

댓글

  • 좋습니다.하지만 ~ / .bash_profile에 코드를 입력하면 로그인 할 때마다 비밀번호를 입력해야합니다. ‘도 원하지 않습니다. 나는 보안에 대해 전혀 걱정하지 않습니다. echo ” 통과 \ n ” | ssh-add가 ‘ 작동하지 않음
  • @ user1607072 예, ssh-agent 스 니펫이 ~/.bash_profile는 답변에 설명 된대로 작동합니다. keychain 유틸리티를 살펴볼 수 있습니다. keychain를 사용하면 재부팅 후 처음 로그인 할 때 비밀번호를 입력해야하지만 이후 로그인에서는 keychain가 기존 ssh-agent 인스턴스. 그 외에도 ‘ 암호없이 ssh-key를 생성하는 옵션이 있지만 이것은 물론 권장되지 않습니다.
  • @ user1607072 더 안전한 접근 방식 중 하나를 제안하면 스크립트에서 암호를 ssh-add로 전달하는 방법이 있습니다. echo "pass\n" | ssh-add가 작동하지 않는 이유는 ssh-addstdin에서 비밀번호를 읽지 않기 때문입니다. 그러나 읽기를 위해 직접 /dev/tty를 엽니 다. expect라는 유틸리티를 사용하여 이에 대한 해결 방법을 포함하도록 답변을 업데이트했습니다.
  • @ user1607072 사용 사례에는 약간 과잉 일 수 있지만 iv ssh GSSAPI 지원과 함께 id = “5426e5ef81”> Kerberos 는 비밀번호가없는 ssh 로그인에도 사용할 수 있습니다. ssh의 해당 인증 방법은 gssapi-with-mic입니다. 일반적으로 대규모 네트워크에서 사용되지만 관심이 있다면 살펴볼 가치가 있습니다.
  • @ErickBrown : 이미 여기 . systemd 로그인 관리자 에서 사용자 지연을 비활성화 한 경우 로그 아웃시 SSH 에이전트 장치를 중지해야합니다. 사용자 지연이 활성화 된 경우 마지막 로그인 세션이 닫힌 후에도 systemd 사용자 인스턴스와 SSH 에이전트 장치가 계속 실행됩니다.

답변

~/.bashrc에 추가 한 다음 로그 아웃 다시 적용합니다.

 if [ ! -S ~/.ssh/ssh_auth_sock ]; then eval `ssh-agent` ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock fi export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock ssh-add -l > /dev/null || ssh-add  

비밀번호를 입력하라는 메시지 만 표시됩니다. 재부팅 할 때마다 처음 로그인 할 때. 계속 실행되는 한 동일한 ssh-agent를 계속 재사용합니다.

댓글

  • 매우 깔끔합니다. , 이렇게하면 하나의 ssh-agent 만 실행됩니다 (: @thomasNyman ‘의 두 번째 솔루션에서와 같이 여러 에이전트가 나에게 보안 위험이있는 것 같습니다 …
  • 다양한 사이트에서 조사하고 다양한 솔루션을 읽은 후 여기에있는 것이 가장 명확하고 요점을 바로 알 수 있습니다. 매우 좋습니다. +1
  • 이 작업을 수행하는 것이 더 좋습니다.`alias ssh = ssh-check-agent “, check-agent 버전이 위의 작업을 수행하도록합니다. 그런 식으로 : a) 한 명의 에이전트 만 받고 b) 필요한 경우에만 에이전트를받습니다.
  • -s가 기본값이라고 생각하므로 ‘ 이미 수행 중입니다.
  • ssh-add 인수 없이는 ~/.ssh/id_rsa를 추가합니다. 개인 키가 다른 파일에있는 경우 ssh-add 인수를 전달할 수 있습니다.

Answer

OP의 질문과 밀접한 관련이 없지만 다른 사람에게는 유용 할 수 있습니다. 7.2.0 이후 ssh (1)에는 첫 번째 인증시 ssh-agent에 키를 추가 할 수있는 옵션이 있습니다. 옵션은 AddKeysToAgent이며 yes, no, ask 또는 confirm, 시스템 전체 또는 개인 .ssh/config 파일

참조 : https://www.openssh.com/txt/release-7.2

댓글

  • .ssh/config 파일을 처음 사용하는 사용자에게 적용됩니다. 이는 ssh 및 뒤에 있으며 (예 : scp) 호스트별로 수행 할 수 있습니다.
  • 여전히 비밀번호를 묻습니다. 예를 들어 로그인 할 때마다 git pull을 시도합니다.
  • @trainosis 문제는 나중에 사용하기 위해 해독 된 키를 메모리에 보관하기 위해 실행중인 ssh-agent 인스턴스가 없을 것입니다. ssh-agent를 사용할 때 로그인 세션 당 한 번만 주어진 키에 대한 비밀번호를 입력해야합니다.

Answer

ssh-agent는 잠금 해제 된 다양한 ssh-key를 캐시하므로 매번 입력 할 필요없이 암호로 ssh-key를 보호 할 수 있습니다.

잠금 해제 된 키를 캐시하려면 해당 키를 잠금 해제해야합니다. 암호로 잠긴 키를 잠금 해제하려면 이러한 암호를 알아야합니다.

사람의 승인이 필요하지 않은 모든 방법 (예 : “암호 입력”)은 시스템이 안전하지 않습니다. 또한 ssh-agent의 전체 목적을 무의미하게 만들 것입니다.

이 모든 것을 말했듯이 암호로 보호되지 않은 ssh-key를 간단히 사용할 수 있습니다 (요청시 Enter 를 누르십시오). 키 생성 중 암호). “비밀번호가 없으므로 ssh-agent는 캐시하지 않기 위해 비밀번호를 요청할 필요가 없습니다.

댓글

  • 키가 사용자 전용 권한이있는 한 ssh-agent가 권한없는 키에 비해 이점이 거의 없다는 데 동의합니다. 저는 로그인 서버에 ssh하는 것을 좋아하고, 그 서버에는 퍼머 션없는 키가 많이 있으며, 각 키는 다른 서버 하나의 잠금을 해제하는 데만 사용할 수 있습니다. 로그인 서버는 다른 작업을 수행하지 않으므로 ‘ 해킹 / 스푸핑 등이 훨씬 더 어렵습니다. 다른 서버는 비밀번호 액세스 권한이 없으며 키 전용입니다.

답변

다음은 SSH 암호를 자동화하는 해결 방법입니다.

  1. 암호를 표준 출력으로 인쇄하는 한 줄짜리 스크립트를 만듭니다. 예 :

     echo "echo MY_SSH_PASSWORD" > ~/.print_ssh_password && chmod 700 ~/.print_ssh_password 

    중요 : 확인 앞의 공백을 기록에 비밀번호가 저장되는 것을 방지 로 복사합니다.

그리고 아래 방법 중 하나를 사용하세요.

  • 표준 입력 방식 사용 :

    cat ~/.ssh/id_rsa | SSH_ASKPASS=~/.print_ssh_password ssh-add - 
  • 또는 명명 된 파이프 접근 방식 :

    1. 명명 된 파이프 ( 프로세스 대체 를 시도 할 수도 있음) :

      mkfifo --mode 0600 ~/.ssh_fifo 
    2. ssh-add 인증에 사용되는 프로그램 지정 :

      cat ~/.ssh/id_rsa >~/.ssh_fifo | SSH_ASKPASS=~/.print_ssh_password ssh-add ~/.ssh_fifo 

    참조 : man ssh-add SSH_ASKPASS에 대해 자세히 읽어보십시오.

댓글

  • echo my_passphrase는 큰 보안 허점입니다. 먼저 입력 한 후 암호는 사용하는 쉘의 내역 파일에 일반 텍스트로 표시됩니다. 두 번째 명령 줄 인수는 Unix (ps -ef)에서 누구나 읽을 수 있습니다. 명령 줄 인수에 암호를 입력하지 마십시오!
  • @ceving 추가 선행 공백을 추가하면 기록 파일의 문제가 해결됩니다. 추가 정보를 추가했습니다.
  • @kenorb : ‘ ps에 표시되는 비밀번호의 더 큰 문제를 해결하지 못합니다. 산출. 히스토리 파일은 일반적으로 소유 한 사용자 만 읽을 수 있지만 명령 줄은 시스템의 모든 사용자가 읽을 수 있습니다.

Answer

로그인시 ssh-add (ssh-agent를 열어야 함)를 권장하지 않습니다. 이는 ssh-agent 섹션이 종료되는시기를 제어 할 수없고 보안 위험을 초래할 수 있기 때문입니다. 하나의 로그인 섹션에서 키 파일을 사용할 필요가 없을 때.

대신 모든 키 파일이 자동으로 추가되고 호출 될 때 호출되는 ssh-agent의 섹션 하위 셸을 여는 스크립트를 작성하는 것이 좋습니다. ssh를 사용해야합니다. 채택 할 수 있다면 계속 읽어보세요.

두 가지 선택이 가능합니다.

  1. 보안 약함 키 파일을 도난당한 경우 (따라서 권장하지 않음 )

  2. 키에 대해 동일한 암호를 사용합니다. 그런 다음 ssh-add keyfile1 keyfile2 ... 할 때 암호를 섹션 당 한 번만 입력하면됩니다.

두 경우 모두 다음과 같이 “ssh_keys_section.sh”스크립트 파일을 작성할 수 있습니다.

#!/bin/bash # This script run a ssh-agent on a sub-shell and automatically ssh-add all keyfiles at once. # This agent ends when you type `exit` to close the sub-shell. exec ssh-agent bash -c "ssh-add /path/to/keyfile1 /path/to/keyfile2 ...; exec bash" 

참고 :

  • 암호 변경 또는 삭제 명령 : ssh-keygen -p -f keyfile
  • 하위 셸 내에서 동일한 것을 공유하는 더 많은 터미널을 분기 할 수도 있습니다. 잠금 해제 된 키 : /path/to/yourterminal & (OS에 따라 다름)

댓글

    과 같은 명령을 사용하여

  • 예 Cygwin 내의 Windows에서 /path/to/yourterminal & == > mintty &
  • 참고 : 사용 후 중첩 된 bash

또는exit로 세션을 닫습니다. 쉘을 닫아야합니다.

답변

if [ ! -S ${HOME}/.ssh/ssh_auth_sock ]; then eval $(ssh-agent) ln -sf "${SSH_AUTH_SOCK}" ${HOME}/.ssh/ssh_auth_sock fi export SSH_AUTH_SOCK=${HOME}/.ssh/ssh_auth_sock ssh_keys=$(find -E ~/.ssh -type f -regex ".*(rsa$|pem)") ssh_agent_keys=$(ssh-add -l | awk "{key=NF-1; print $key}") for k in "${ssh_keys}"; do for l in "${ssh_agent_keys}"; do if [[ ! "${k}" = "${l}" ]]; then ssh-add "${k}" > /dev/null 2>&1 fi done done 

답변

예전에 steampowered에서 언급 한 스크립트를 사용했습니다. 파일을 남기지 않기 때문에 지금 아래 스크립트를 만들었습니다.

zsh 셸에서만 작업합니다.

#!/usr/bin/env zsh AGENT_BIN=`which ssh-agent` AGENT_ADD_BIN=`which ssh-add` AGENT_PID=`ps -fe | grep ${AGENT_BIN} | awk -vuser=$USER -vcmd="$AGENT_BIN" "$1==user && $8==cmd{print $2;exit;}"` if [ -z "$AGENT_BIN" ]; then echo "no ssh agent found!"; return fi if [ "" -eq "$AGENT_PID" ]; then if read -sq "YN?Do you want to unlock your ssh keys?"; then echo "" output=`$AGENT_BIN | sed "s/echo/#echo/g"` eval $output $AGENT_ADD_BIN fi else for f in "/proc/"* do cmdline=`cat "$f/cmdline"` if [ "${AGENT_BIN}" -ef "${cmdline}" ]; then export SSH_AUTH_SOCK=`cat $f/net/unix | grep --binary-file=text -oP "((/[^/]*?)+/ssh-[^/]+/agent\.\d+$)"` export SSH_AGENT_PID=${f##*/} break; fi done fi 

댓글

  • ” 작업 zsh 셸만 “, 좋습니다.하지만 shebang 줄에 ” sh “?

답변

SSH_ENV="$HOME/.ssh/environment" function start_agent { echo "Initialising new SSH agent..." /usr/bin/ssh-agent | sed "s/^echo/#echo/" > "${SSH_ENV}" echo succeeded chmod 600 "${SSH_ENV}" . "${SSH_ENV}" > /dev/null /usr/bin/ssh-add; } # Source SSH settings, if applicable if [ -f "${SSH_ENV}" ]; then . "${SSH_ENV}" > /dev/null #ps ${SSH_AGENT_PID} doesn"t work under cywgin ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { start_agent; } else start_agent; fi 

여기에서 크레딧 제공 : https://www.cygwin.com/ml/cygwin/2001-06/msg00537.html

이 솔루션은 http://mah.everybody.org/docs/ssh

답변

비밀번호 관리자로 seahorse를 실행하는 경우 … 당신은 아마도; D

찾고있는 목표를 달성하는 또 다른 해결책은 단순히 로그인시 자동 잠금 해제를 위해 해마에 ssh 키를 추가하는 것입니다. . 이것의 가장 큰 이점은 gdm을 통해 로그인 한 후 키에 대한 암호를 입력 할 필요가 없으며 키에 암호가 있더라도 로그인하는 데 사용할 필요가 없다는 것입니다. 이를 위해서는 개인 키와 공개 키가 모두 필요합니다. 또한 해마의 명명 규칙을 따라야합니다. 기본값은 허용됩니다 (개인 키의 경우 id_rsa, 공개 키의 경우 id_rsa.pub … 실제로 privatekeyname privatekeyname.pub 인 모든 항목)

로그인시 자동 잠금 해제를 위해 seahorse에 ssh 키를 추가하려면; (federa25에서는 경로가 매우 유사 할 가능성이 높지만 다른 배포판에서 경로가 어디에 있는지 잘 모르겠습니다.)

/lib64/seahorse/seahorse-ssh-askpass /path/to/keys/here 

저에게는

/lib64/seahorse/seahorse-ssh-askpass ~/.ssh/id_rsa 

(seahorse는 제 경우에 공개 키가 id_rsa.pub 인 것으로 자동으로 가정합니다.)

명령을 실행 한 후 seahorse는 귀여운 gtk 암호 필드에 개인 키의 암호를 입력하거나 암호없이 키를 생성 한 경우 공백으로 두십시오.

Seahorse는 모든 것이 정상이면 메시지를 표시하지 않습니다. 대상 머신으로 ssh를 시도해야합니다.그런 다음 seahorse는 암호를 사용하여 키를 다시 잠금 해제하라는 메시지를 표시하지만 (한 번만 발생 함) 이번에는 약간 다르게 보일 것입니다 .P (이것은 또한 seahorse가 마법을 추가하기 위해 해마를 사용하는 부분이기도합니다. ), OPTION 을 제공하여 로그인시 키를 잠금 해제하려면이 옵션을 선택해야합니다. 목표를 달성하십시오.

모든 답변을 읽지 않았기 때문에이 답변을 시도하기 전에 모든 사람이 ssh-add를 사용하여 수행하도록 지시 한 내용을 실행 취소하는 것이 좋습니다. 그렇지 않으면 문제가 발생할 수 있습니다. 키, idk.

답변

SSH 용 싱글 사인온 솔루션으로 pam_ssh .

이 도움말 에 따르면, 개념은 다음과 같습니다.

ssh를 통해 여러 * nix 기반 컴퓨터로 작업하는 경우 아마도 단점에 지쳤을 것입니다. 다른 상자에 액세스 할 때마다 암호를 입력해야합니다. 다른 암호를 입력하지 않고도 ssh 액세스 권한이있는 모든 컴퓨터에 액세스 할 수있는 안전한 방법이 있습니다.


이것은 실제로 매우 간단합니다. 기본적으로 공개 / 개인 키 쌍을 만들어 다른 컴퓨터에 자신을 인증 한 다음 PAM은 로그온 후 키를로드하는 에이전트를 생성하여 모든 원격 시스템에 액세스 할 수있는 단일 사인온 솔루션을 제공합니다. 이 가이드는이를 설정하는 과정을 안내합니다.

실제로 작동하는지 확인하지 않았습니다.

답변

다음을 ~/.bashrc 파일에 추가하십시오.

ssh-add -L|grep identities > /dev/null && ssh-add /path/to/ssh/private/key 

댓글

  • 비밀번호를 입력하라는 메시지가 표시되지 않는 질문과 이것이 어떤 관련이 있는지 ‘ 알 수 없습니다. 후속 로그인시.

답변

(비밀번호가없는) 키를 추가하고 ssh-add X 에서 실행하는 경우에도 암호를 묻는 메시지를 표시하지 않습니다.

DISPLAY= ssh-add -k /path/to/key </dev/null &>/dev/null 

종료 상태는 성공 또는 실패를 나타냅니다.

답변

다음은 결정적입니다. 스크립트.

$ PASSW를 업데이트 한 다음 터미널에 복사하여 붙여 넣기

# <sshpass> via typinator # Updated: 2017-01-18_21h36 # # apt-get update -y; apt-get install expect -qy # Pass this value to ssh-add PASSW="myfancypass123" # Define a name for this script THIS_SCRIPT="$(date +%Y-%m-%d_%H-%M-%S-%N)".sh # Create a fresh directory to work from / Clean up rm -rf ~/temp; mkdir -p ~/temp; cd ~/temp; ls -la # Output our bash script file - BEGIN cat <<< " #!/bin/bash set -u # Stop if an unbound variable is referenced set -e # Stop on first error export HISTIGNORE="expect*"; # Normal CMDs echo && echo "The process should take about 10 seconds:" && echo eval "$(ssh-agent -s)"; sleep 0.5; # Define VAR passed when this bash-script was launched password="$@" # Launch the expect magic expect -c " spawn ssh-add /root/.ssh/id_rsa expect "?assword:" send \"$password\r\" expect "?password:" send \"$password\r\" expect eof" export HISTIGNORE=""; export password=""; " > $THIS_SCRIPT # Output our bash script file - END # Ensure we are in the right path cd ~/temp; ls -la; sleep 1; # Run the bash script chmod +x ./$THIS_SCRIPT; ./$THIS_SCRIPT "$PASSW"; unset password; # Clean up rm -rf ~/temp; mkdir -p ~/temp; cd ~/temp; ls -la 

답변

내가 아는 가장 좋은 방법은 이전 작업에서 적용한 PAM 로그인 스크립트를 사용하는 것입니다.이 질문에서 만족스러운 답변을 찾을 수 없었기 때문입니다.

귀하의 암호는 시스템 비밀번호와 강력한 파생 기능으로 암호화되어 저장됩니다. 로그인시 시스템 비밀번호를 사용하여 비밀번호를 해독하고 에이전트에 추가합니다.

https://github.com/capocasa/systemd-user-pam-ssh

제시된 다른 모든 솔루션에 비해 장점은 부팅시 ssh-add를 수동으로 실행하는 것과 동일한 보안을 수고없이 결합한다는 것입니다. 추가 도구가 없으며 대부분의 시스템 (OpenSSL)에 기본적으로 이미 설치되어있는 하나의 추가 종속성이 있습니다.

Answer

My macOS에서의 설정은 다음과 같습니다 (.zshrc 또는 bash 사용자의 경우 .bash_profile) :

기본값은 /private/tmp/com.apple.launchd.SOMETHINGHERE/Listeners이므로 macOS에서는 || [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]] 부분이 필요합니다. 그렇지 않으면 $SSH_AUTH_SOCK가 항상 무언가로 설정되어 있기 때문에 @Thomas Nyman 포괄적 인 답변이 실패합니다.

그런 다음 .zlogout (또는 .bash_logout (bash 사용자 용) :

if [ -n "$SSH_AUTH_SOCK" ] ; then eval `/usr/bin/ssh-agent -k` fi 

macOS Mojave 10.14.5에서 테스트

답변

이것은 Windows 용 Git에서 ssh-agent 자동 실행의 GitHub에서 매우 잘 설명했습니다. , Linux에서도 작동합니다.

bash 또는 Git 셸을 열 때 자동으로 ssh-agent를 실행할 수 있습니다. 다음 줄을 복사하여 Git 셸의 ~/.profile 또는 ~/.bashrc 파일에 붙여 넣습니다.

 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  

개인 키가 기본 위치 중 하나에 저장되지 않은 경우 (예 : ~/.ssh/id_rsa), “SSH 인증 에이전트에서 찾을 수있는 위치를 알려야합니다. ssh-agent에 키를 추가하려면 ssh-add ~/path/to/my_key를 입력하십시오.

팁 : 잠시 후 ssh-agent가 키를 잊어 버리도록하려면 다음을 수행 할 수 있습니다. ssh-add -t <seconds>를 실행하여 구성합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다