想象一下,我有一个bash脚本,它通过ssh在远程机器上执行命令:
# Do something here
ssh otheruser@host command1
# Do something else
ssh otheruser@host command2
# Do most local tasks
此脚本提示我多次输入otheruser @ host的凭据。是否有一种安全,简单且可接受的方式在脚本的生命周期内缓存这些凭据,但保证在脚本结束后(正常或发生错误时)它们会丢失?也许解决方案会使用ssh-agent?
我正在寻找类似的东西:
special_credential_saving_command_here # This will prompt for credentials
ssh otheruser@host command1 # This will not prompt now
ssh otheruser@host command2 # This will not prompt either
我的动机是避免在同一个脚本中多次输入凭据,而不会在脚本终止后继续存在这些凭据持久存在的风险。输入凭证不仅繁琐,而且还需要我等待脚本完成,以便我可以输入凭据而不是让它自己运行(它是一个长时间运行的脚本)。
答案 0 :(得分:1)
使用控制套接字在多个进程之间共享经过身份验证的连接:
ssh -fNM -S ~/.ssh/sock otheruser@host # Will prompt for password, then exit
...
ssh -S ~/.ssh/sock otheruser@host command1
ssh -S ~/.ssh/sock otheruser@host command2
...
ssh -S ~/.ssh/sock -O exit otheruser@host # Close the master connection
有关如何为控件套接字创建唯一路径的信息,请参阅man ssh_config
选项下的ControlPath
。