klo*_*lor 3 ssh password timeout
我怎么解决这个问题?我有一个 bash 脚本(在 Ubuntu Server 下),执行多个 SSH 连接,执行一些远程传输,例如 rsync 多次。
我的问题是,我想避免多次输入密码。但是我不想使用SSH公钥交换,因为如果有人拥有密钥,就可以连接远程计算机。
我想要以下内容:
类似的东西,sudo 是如何工作的,只是使用 ssh。
知道如何解决这个问题吗?
编辑1:
我发现了一个名为 ssh 多路复用的新 SSH 功能。也许使用这个我可以达到我想要的目标。
https://unix.stackexchange.com/questions/50508/reusing-ssh-session-for-repeated-rsync-commands
这行得通吗?
(转贴从每个请求的答案我的评论klor)。
这不是您想听到的,但这正是基于密钥的身份验证的用途。只要你在你的私钥上加上密码,它的安全性不亚于密码认证。
您可以使用ssh-agent以避免每次都需要输入密码,并且该-t选项ssh-agent将为您提供您所追求的超时行为。
# start a shell under ssh-agent with a 5-minute timeout for keys loaded with ssh-add
ssh-agent -t 300 /bin/bash
# add your key(s) to the agent; ssh-add will prompt for passphrase, if one is set
ssh-add
# do some stuff
ssh remote.server cat /some/file
rsync file1 file2 klor@remote.server:/some/directory
# after 300 seconds, timeout reached, run ssh-add again to re-add your keys
ssh-add
Run Code Online (Sandbox Code Playgroud)
您的脚本将需要一些逻辑来确定超时发生的时间。一种方法是运行ssh和rsyncwith -o BatchMode=yes,这将阻止交互式身份验证方法,因此如果密钥不再可用,ssh将退出而不是提示输入密码。您可以使用退出代码来确定是否需要ssh-add再次运行;在这种情况下$?应该设置为255。
您仍然需要弄清楚如何将密码提供给ssh-add,因为它没有提供以编程方式接受它的方法。除非您的脚本会提示您手动输入它,否则您可能需要在expect该部分使用它,这意味着在某处对密码进行硬编码。
| 归档时间: |
|
| 查看次数: |
10665 次 |
| 最近记录: |