bash는 스크립트에서 SSH 설정을 잊어버립니다.

bash는 스크립트에서 SSH 설정을 잊어버립니다.

SSH 키 세트를 생성하고 이를 알려진 호스트에 업로드하는 스크립트를 작성 중입니다. 이는 각 장치에 키가 필요할 때 유용합니다.

새 키가 생성된 후 호스트에 업로드하는 옵션을 추가했습니다. 그러나 bash는 키 관리자에 키를 로드한 이후 항목을 방금 보냈어야 할 때 암호를 묻는 메시지를 표시하거나 폴백으로 암호를 묻는 메시지를 표시하기 때문에 내 세션 등을 잃어버린 것 같습니다. 지정된 키 파일 SSH 구성에서.

스크립트의 관련 부분은 다음과 같습니다.

for host in "${hosts[@]}"
do
  keyfile=$(printf "%s_keys/%s_%s_%s.id_ed25519" "$system" "$system" "$email" "$host")
  ssh-keygen -t ed25519 -C $(printf "%s_%s" "$email" "$system") -P "$pw1" -f "$keyfile"
  read -r -p "ssh new key to host $host? [y/n] " response
  if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
  then
    cat $keyfile.pub | ssh "$host" 'cat >> .ssh/authorized_keys'
  fi
done

그래서 스크립트를 실행하면 다음과 같은 결과가 나타납니다.

The key fingerprint is:
SHA256:n8FWwe+TaHbWKwWVzCdIbAcfFnPTh8J0pukzuv9J4pQ a_b
The key's randomart image is:
+--[ED25519 256]--+
...
+----[SHA256]-----+
ssh new key to host [email protected]? [y/n] y
[email protected]'s password:
Permission denied, please try again.

하지만:

$ ssh myhost.com

You have new mail.
Last login: Sun Oct 30 03:28:07 2016 from 65.60.221.155
[myhost.com ~]

테스트로서 저는 다음과 같은 보다 간단한 스크립트를 작성했고 문제 없이 시작되었습니다.

$ cat test.bash
#!/bin/bash
echo test | ssh myhost.com 'cat >> test.txt'
$ ./test.bash

$ ssh myhost.com

You have new mail.
Last login: Sun Oct 30 03:33:25 2016 from 65.60.221.155
[myhost.com ~] cat test.txt
test

내 SSH 정보를 잊어버리게 만드는 긴 스크립트에서 내가 무엇을 했나요?

답변1

글쎄, 나는이 실수를 저지른 것에 대해 약간 어리석은 느낌이 들지만 그것을 고치는 것에 대해 생각하는 것은 조금 똑똑합니다. 매우 상세한 ssh를 제안한 @Jajuke에게 감사드립니다.

내 SSH 구성에서 호스트의 약어를 설정했습니다. 예를 들면 다음과 같습니다.

Host myhost
  HostName myhost.com
  User username

쉘에서는 이 작업을 수행 ssh myhost하면 모든 것이 잘 작동합니다.

그러나 내 스크립트에서는 호스트 이름을 확인 .ssh/known_hosts하고 전체 호스트 이름을 갖습니다. P 내 SSH 구성 에서는 myhost.com; myhost물론 ssh는 비밀번호 인증으로 대체됩니다.

내 솔루션은 내 별칭 옆에 전체 호스트 이름을 포함하도록 SSH 구성을 업데이트하는 것이었습니다.

Host myhost myhost.com
  HostName myhost.com
  User username

다시 작동합니다!

이것이 누군가가 비슷한 혼란을 겪지 않기를 바랍니다.

관련 정보