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

它又起作用了!

希望这能让某人摆脱类似的困惑。

相关内容