在 bash 脚本中使用 ssh 密钥

using ssh keys in bash script

我已经设置了从服务器 A 到服务器 B 的 ssh 密钥,我可以不用密码登录到服务器 B。我正在尝试在 bash 脚本中设置反向 ssh 隧道。从命令行如果我这样做

ssh -N -R 1234:localhost:22 user@mydomain.co.uk -p 22

表单服务器 A 它按预期工作,即不需要密码,但是如果我在脚本中使用它

#!/bin/bash
/usr/bin/ssh -N -R 1234:localhost:22 user@mydomain.co.uk -p 22

我被要求输入密码

user@mydomain.co.uk's password:

如何制作它才能使用按键?

您需要让 ssh 知道应该在哪里搜索密钥,如果它们不在标准位置且不受密码保护。最简单的是通过指定 -i 直接切换到 ssh:

/usr/bin/ssh -i /path/to/key -N -R 1234:localhost:22 user@mydomain.co.uk -p 22

或者像这样在 ~/.ssh/config 中使用更简洁的方法:

Host mydomain.co.uk
  IdentityFile /path/to/key

但请确保该脚本 运行 具有您的用户上下文,这样脚本才能看到配置文件。

如果您的钥匙位于标准位置 (~/.ssh/id_rsa),您的代码应该可以正常工作。尽管如果您将密钥存储在 ssh-agent 中它应该可以工作,但您可以在启动脚本之前使用 ssh-add -L 对其进行验证。 ssh-agent 如果他的密钥受密码保护,也可以解决问题。