通过 ssh 使用密码执行命令

通过 ssh 使用密码执行命令

我想从我的本地机器通过 ssh 在两台服务器上执行两个命令

ssh user@"$APP_HOST" "sh /home/agents/startAgent.sh --auto-shutdown > agent.log 2>&1 </dev/null & "
ssh user@"$DB_HOST" "sh /home/agents/startAgent.sh --auto-shutdown > agent.log 2>&1 </dev/null & "

APP_HOST运行良好,并且.sh.可以在远程启动脚本。

但当DB_HOST我尝试运行相同的命令时,系统要求输入密码。目前,我还没有配置无需密码的访问权限(没有权限执行此操作)。

但是如何在命令本身内部提供密码而不输入呢?

答案1

如果您对相同的 ssh 命令有不同的行为,则可能是 SSH 配置错误。

检查您的 SSH 配置文件,如果没有区别,请检查您的 ssh 密钥。

简单ssh user@"$DB_HOST"能做什么?

答案2

您必须安装用户的私钥,然后向远程服务器中的用户远程启动命令。如果您有远程用户的密码,您就有权安装您的私钥,只需运行

ssh-copy-if user@"$DB_HOST"

您将提示输入用户密码,从那一刻起,您无需输入密码即可登录远程服务器。无需更改任何配置,openssh 服务器默认配置为接受密钥身份验证。

答案3

您可以安装和使用各种 ssh-askpass 包(ssh-askpass、ssh-askpass-gnome、ksshaskpass (KDE)、ssh-askpass-fullscreen (Gnome2)……)之一,并在每次请求密码时强制打开密码提示符(在您的 X 会话中)。

一个很好的解释是这篇文章中的第一个答案:告诉 SSH 使用图形提示输入密钥密码

答案4

为 SSH 创建新的身份验证密钥对,不要在密码中输入值(在终端上)

  1. ssh-keygen -t rsa
  2. ssh-copy-id -i /home/local_user/.ssh/id_rsa user@$DB_HOST
  3. ssh-keygen -f "/home/local_user/.ssh/known_hosts" -R "$DB_HOST"

执行(你的 shell 脚本)

ssh -t user@$APP_HOST 'sh /home/agents/startAgent.sh --auto-shutdown > agent.log 2>&1 </dev/null & '

ssh -t user@$DB_HOST 'sh /home/agents/startAgent.sh --auto-shutdown > agent.log 2>&1 </dev/null & '

相关内容