在我的shell脚本中,我正在运行一个命令,它要求我输入。
我怎样才能给予命令它所需要的自动输入?
举例来说:
$cat test.sh
ssh-copy-id [email protected]
运行test.sh时:
- 首先,它会问:
Are you sure you want to continue connecting (yes/no)?
- 然后,它会要求我输入密码:
[[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) 's password:
有办法自动输入吗?
7条答案
按热度按时间smtd7mpg1#
对于简单的输入,比如两个提示和两个相应的固定响应,你也可以使用“here document”,其语法如下所示:
<<前缀是一个模式,在本例中是'!直到以该模式开始的一行的所有内容都被解释为标准输入。这种方法类似于将多行echo通过管道传输到ssh中的建议,除了它保存了echo命令的fork/exec,我发现它更具可读性。另一个优点是它使用内置的shell功能,因此它不依赖于expect。
flseospp2#
对于一般的命令行自动化,Expect是经典的工具。如果您对Python更熟悉,请尝试pexpect。
这里有一个类似的问题,建议使用Expect:Use expect in bash script to provide password to SSH command
n7taea2i3#
一定有...使用spawn、expect和send命令:
在Stack Overflow中有更多的例子,请参阅:Help with Expect within a bash script
您可能需要首先安装这些命令,具体取决于您的系统。
deyfvvtc4#
你也可以将答案导入脚本:
其中
\n
是转义序列9nvpjoqh5#
ssh-key with passphrase,with keychain
keychain是一个小型实用程序,它代表您管理ssh-agent,并允许ssh-agent在登录会话结束时保持运行。在后续登录时,keychain将连接到现有的ssh-agent示例。实际上,这意味着只有在重新引导后的第一次登录时才必须输入密码。在后续登录时,将使用来自现有ssh-agent示例的未加密密钥。这对于在没有无密码ssh-key的cron作业中允许无密码RSA/DSA身份验证也很有用。
要启用keychain,请安装它并将以下内容添加到~/.bash_profile:
eval
keychain --agents ssh --eval id_rsa
从安全性的Angular 来看,ssh-ident和keychain比ssh-agent示例更糟糕,仅限于特定会话的生存期,但它们提供了很高的便利性。为了提高keychain的安全性,有些人在~/.bash_profile keychain调用中添加了--clear选项。通过这样做,密码必须在登录时重新输入,但是在用户注销后,cron作业仍然可以访问未加密的密钥。keychain wiki页面有更多信息和示例。得到这个信息从;
https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt
希望这有帮助
我个人已经能够在终端启动时自动输入我的密码,方法是:(当然,您可以修改脚本并使其适合您的需要)
1.编辑bashrc文件以添加此脚本;
检查SSH agent是否唤醒
if [ -z“$SSH_AUTH_SOCK”] ;然后执行ssh-agent bash -c“ssh-add ;$0”echo“SSH代理被唤醒”exit fi
上面一行将在终端启动时启动expect脚本。
./ssh.exp
以下是此expect脚本的内容
以下是我的keyadding.sh脚本的内容(您必须将两个脚本都放在主文件夹中,通常是/home/user)
**我强烈建议加密.exp脚本上的密码,并将此.exp文件重命名为term_ Boot .exp或出于安全目的的其他文件。**不要忘记使用nano或Vim直接从终端创建文件(例如:
nano ~/.bashrc | nano term_boot.exp
)和chmod +x script.sh
以使其可执行。chmod +r term_boot.exp
也很有用,但必须在bashrc文件中的./ssh.exp之前添加sudo。所以你每次启动终端时都必须输入sudo密码。对我来说,这比密码更方便,因为我记得我的管理员(sudo)密码的壁炉。还有,我想还有另一种方法https://www.cyberciti.biz/faq/noninteractive-shell-script-ssh-password-provider/
当我有时间的时候,我一定会改变我的方法。
vvppvyoh6#
您可以按如下方式编写expect脚本:
并运行它:
vof42yt17#
如果是sudo密码-最简单的:
将
<your-command>
转换为: