如何在 bash 中传递密码而不提示输入?

如何在 bash 中传递密码而不提示输入?

我想要做的是:从本地终端运行一个 bash 脚本,以在 EC2 实例中运行一个 jar 文件。但为了运行该脚本,我必须先使用 .pem 凭据登录,然后执行su admin并输入管理员密码以获得运行访问权限。到目前为止,我弄清楚的命令是这样的:

ssh -i ~/.ssh/my_credentials.pem -t ${EC2IP} 'su admin' "ADMIN_PASSWORD" 'cd /tmp' 'java -jar my-program.jar'

但它仍然提示我输入 ADMIN_PASSWORD,然后我的终端将登录到该 EC2 机器,这不是我想要的,我只想完成所有命令,然后继续使用另一个 EC2 实例。

请问我该如何实现?非常感谢!

答案1

您的问题没有合适的解决方案。也许您可以更改一些安全规则/etc/pam.d/su。但我不确定是否可以以及如何更改。

我知道为什么你不能与...ssh结合使用旨在在服务器终端上运行,或者换句话说:需要正确的su
su
su终端电话沟通。


传递密码su也不起作用。
大多数使用密码的程序都有一个选项可以将密码放入其中,
不幸的是,su只能使用 promt。

不推荐的方法是


su您可以通过ssh用户名管理员连接来避免使用,
或者首先将权限授予您正在使用的用户。

希望这能帮助你前进。

答案2

A. 不要这样做。改用 sudo。您可能需要在目标上从 /etc/sudoers 中注释掉以下行:

Defaults    requiretty

B. 假设您无论如何都要这样做,那么使用 expect 来为您完成: http://www.tcl.tk/man/expect5.31/expect.1.html

但是,说实话,不要这么做。

相关内容