我想在远程机器上执行命令。远程用户需要密码验证。使用以下示例脚本时出现以下错误,这是示例脚本 applmgr.sh 的内容
#!/bin/bash
ssh [email protected] -c "cd ; touch testing ; cp testing testing_is ;mv testing
working" <<!
applmgr ## Password of applmgr user##
!
执行时,它给出以下消息,
[oracle@dbsrvr ~]$ sh applmgr.sh
standard in must be a tty
答案1
将密码放入脚本中是一种非常糟糕的安全做法。但如果你必须这样做的原因,您可以使用诸如用于此目的的工具sshpass
。
不过,我强烈建议您考虑对此类作业使用密钥对身份验证。
如果您在主机上a.example.com
并且有要运行的作业b.example.com
,则可以使用以下命令进行设置:
ssh-keygen
- 这将创建一个用于身份验证的公钥/私钥对ssh-copy-id [email protected]
- 这将在远程主机上设置您的公钥以供使用。运行此命令时,系统会要求您输入密码,但此后将使用密钥进行身份验证。
从那时起,您可以使用eg在远程主机上运行。ssh [email protected] 'command'
command
答案2
看看expect
命令,这是为与应用程序交互并模拟用户行为而构建的系统。
(当然,放弃密码而使用密钥才是真正的解决方案)