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

好吧,我覺得自己犯了這個錯誤有點愚蠢,但想到解決這個問題又有點聰明——感謝 @Jajuke 的建議,去做一個非常非常詳細的 ssh。

在我的 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

它又起作用了!

希望這能讓某人擺脫類似的困惑。

相關內容