我想编写一个简单的 bash 脚本,用于更新给定目录中的 SVN 工作副本。使用协议访问存储库svn+ssh
。这需要遵循的基本过程是:
#!/bin/bash
# temporarily relax firewall
iptables -I OUTPUT -p tcp --dport 12345 -j ACCEPT
svn up /path/to/working/copy
# prompt for ssh password will be here
# close firewall again
iptables -I OUTPUT -p tcp --dport 12345 -j REJECT
我被困在如何告诉我的 bash 脚本在提示时向 SSH 提供密码的问题上。svn up
不出所料,在命令后的行中输入密码不起作用。
这有可能吗?如果不可能,我们将欢迎其他方式来实现这一目标。
PS,我知道我应该使用 SSH 公钥/私钥身份验证,但是运行托管 SVN repo 的服务器的人不愿意为我设置这个!
答案1
PS,我知道我应该使用 SSH 公钥/私钥身份验证,但是运行托管 SVN repo 的服务器的人不愿意为我设置这个!
这太卑鄙了!不过我假设你有 SSH 访问权限来执行此操作。大多数现代 OpenSSH 安装不需要在服务器上进行任何设置(除了安装之外)。我会认真考虑先尝试设置一个 SSH 密钥:
ssh-keygen
ssh-copy-id username@remotehost
那就试试吧ssh username@remotehost
。如果它能帮你登录,那真是太神奇了,如果没有,你只是浪费了一分钟的生命 :)
之后,您就会得到和这样的选项expect
,但sshpass
这些选项更糟糕,因为您以纯文本形式对密码进行了硬编码。真恶心。