在 bash 脚本中使用 ssh 密钥

Lur*_*rch 2 ssh bash key tunnel

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

ssh -N -R 1234:localhost:22 user@mydomain.co.uk -p 22
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash
/usr/bin/ssh -N -R 1234:localhost:22 user@mydomain.co.uk -p 22
Run Code Online (Sandbox Code Playgroud)

我被要求输入密码

user@mydomain.co.uk's password:
Run Code Online (Sandbox Code Playgroud)

我如何使它使用密钥?

Jak*_*uje 5

ssh如果密钥不在标准位置且不受密码保护,您需要知道应该在哪里搜索密钥。最简单的方法是-i直接指定switch 到ssh

/usr/bin/ssh -i /path/to/key -N -R 1234:localhost:22 user@mydomain.co.uk -p 22
Run Code Online (Sandbox Code Playgroud)

或者~/.ssh/config像这样更干净的方式:

Host mydomain.co.uk
  IdentityFile /path/to/key
Run Code Online (Sandbox Code Playgroud)

但请确保脚本与您的用户上下文一起运行,因此脚本将看到配置文件。

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