我想从我的本地机器通过 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 创建新的身份验证密钥对,不要在密码中输入值(在终端上)
ssh-keygen -t rsa
ssh-copy-id -i /home/local_user/.ssh/id_rsa user@$DB_HOST
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 & '