在一个shell脚本文件中,我使用了一些像scp
这样的命令, make install
它来询问我的密码。
我运行一个shell脚本来编译一个大项目,并在一段时间后要求我使用scp
密码。 我需要等待那个过程,然后给密码。
我只是想通过没有交互的shell脚本来完成,所以我怎样才能避免在这里提示input密码?
如果您不能使用ssh trust,并且稍后必须在您的脚本中输入密码,请使用read -s -p "Password:" USER_PASSWORD
静默读取密码。 您可以export USER_PASSWORD
到期望脚本,避免它显示在ps
:
#!/usr/bin/expect -f spawn scp some.file USER@otherhost:~ expect "assword:" send -- "$env(USER_PASSWORD)\r" expect eof
简短的回答: 不
使用SCP的公共密钥认证和使用NOPASSWD指令的sudo
进行安装
我认为最好是生成一个认证密钥 ,并使用这个基于密钥的认证,而不是将纯文本密码写入脚本。
不,你不会找到任何方法来使用SSH配置文件或命令行选项密码硬编码,我敢肯定这是设计。
如果你的环境变得很困难,那么知道这个脚本可以使用-i参数来指定一个身份文件是很有帮助的,所以你不必拥有一个完整的主目录设置或者类似的东西。 还有其他一些选项可以帮助使用ssh确实鼓励密码认证的密钥认证。
如果你正在跨越几个用户使用这种方式,你不想被打扰创建密钥并将其复制到服务器,那么你也可以编写脚本。 检查一个现有的密钥并做一个快速测试,看看是否可以与之建立联系并不困难。 如果你不能没有密码,那么你会ssh-copy-id到服务器,要求ssh密码一次,在脚本的开始,所以在开始和运行脚本之间会有很小的滞后,将只有一次。 你甚至可以为每个用户设置一个单独的密钥,只需要在他们自己的〜/ .script / key /目录下脚本,这样就可以阻止用户访问SSH服务器。
如果要真正限制该用户在远程服务器上可以完成的操作,则可以使用rssh作为远程帐户上的shell,这将限制用户访问传输文件的权限。
我们以前用这种方式为使用基于密钥的身份验证提供所需脚本的密码是一种很好的方式,不可能或者需要使用应用程序,服务,MySQL密码,无论如何…我们将密码存储在加密文件中,然后解密此文件在运行时提供密码给脚本。
密码解密脚本,我们称之为yourcreds.rb,当然仅限于root用途,而且未加密的密码也不会存储在任何地方。 例如,你可以运行:
root @ host:〜#yourcreds.rb | grep mysql | awk {'print $ 3'}
例如,没有awk会输出存储的行:service | 用户| 密码| 描述| 等等… mysql mysqluser密码….
使用yourcreds.rb(或其他),你可以输出密码,并且可以很容易地将这个方法结合到更大或更复杂环境中的脚本/ cron作业中。
另外,如果我没有记错,我们不必使用grep / awk或任何东西。 我们只是在opts中编写解析的东西,如:yourcreds.rb list mysql或yourcreds.rb -l等
我们使用河豚和yamls来存储加密的密码。 我相信你可以有创意。 只要确保它对任何人来说都是防弹的。