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

그리고 그것은 다시 작동합니다!

이것이 비슷한 당혹감에서 누군가를 구할 수 있기를 바랍니다.

관련 정보