![如何在 bash 中传递密码而不提示输入?](https://linux22.com/image/1524268/%E5%A6%82%E4%BD%95%E5%9C%A8%20bash%20%E4%B8%AD%E4%BC%A0%E9%80%92%E5%AF%86%E7%A0%81%E8%80%8C%E4%B8%8D%E6%8F%90%E7%A4%BA%E8%BE%93%E5%85%A5%EF%BC%9F.png)
我想要做的是:从本地终端运行一个 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
但是,说实话,不要这么做。