使用 b 脚本进行无密码 ssh

使用 b 脚本进行无密码 ssh

我正在编写一个应该启动 serf 代理的 bash 脚本(http://www.serfdom.io/intro/index.html) 通过 ssh 在远程机器上。我已经使用以下方式设置了 rsa 密钥...

ssh-key-gen -t rsa -b 4096
ssh-copy-id -i ~/.ssh/id_rsa.pub <remote-host>

我可以从终端无需密码即可 ssh 到远程计算机。这是我在脚本中进行的调用

ssh <user>@<hostname> "serf agent -node database -event-handler user:database_install=~/serf_install_db_handler.sh"

但是当脚本执行时,我必须使用此命令才能在没有密码提示的情况下运行它......

ssh -i ~/.ssh/id_rsa.pub <remote-host> <command>

为什么我必须在脚本中执行此操作,而不需要在终端中执行此操作?

答案1

ssh -i选择一个文件,从中读取身份(私钥)或公钥认证。

您可以配置 ssh 以在该主机的配置中使用它,这样您就不必指定它。

添加~/.ssh/config(替换server.example.com为您的服务器的主机名或 IP):

Host server.example.com
    User username
    Hostname server.example.com
    PreferredAuthentications publickey,password
    IdentityFile ~/.ssh/id_rsa.pub

此配置将使您的连接始终尝试使用 id_rsa.pub 密钥,如果密钥由于某种原因不可用,则回退到密码。

所以现在您应该能够使用ssh <user>@<host> <command>您的私钥自动进行身份验证。

答案2

您是否尝试过在系统启动时使用 ssh-add?

ssh-add — 将私钥身份添加到身份验证代理

您可以使用此命令,默认情况下,连接时 ssh 将尝试使用您的私钥,然后才使用密码。

相关内容