ssh-key with passphrase, with keychain
keychain 是一个小型实用程序,它代表您管理 ssh-agent 并允许 ssh-agent 在登录会话结束时保持运行。在后续登录时,钥匙串将连接到现有的 ssh-agent 实例。实际上,这意味着密码只能在重新启动后的第一次登录时输入。在后续登录时,将使用来自现有 ssh-agent 实例的未加密密钥。这对于在没有无密码 ssh 密钥的 cron 作业中允许无密码 RSA/DSA 身份验证也很有用。
要启用钥匙串,请安装它并将以下内容添加到 ~/.bash_profile:
评估keychain --agents ssh --eval id_rsa
从安全的角度来看,ssh-ident 和 keychain 不如 ssh-agent 实例受限于特定会话的生命周期,但它们提供了高度的便利性。为了提高钥匙串的安全性,有些人在他们的 ~/.bash_profile 钥匙串调用中添加了 --clear 选项。通过这样做,必须如上所述在登录时重新输入密码,但 cron 作业在用户注销后仍然可以访问未加密的密钥。钥匙串 wiki 页面有更多信息和示例。
此信息来自;
https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt
希望对你有帮助
我个人可以通过执行以下操作在终端启动时自动输入我的密码:(当然,您可以修改脚本并使其适合您的需要)
-
编辑 bashrc 文件以添加此脚本;
检查 SSH 代理是否处于唤醒状态
如果 [ -z "$SSH_AUTH_SOCK" ] ;然后
exec ssh-agent bash -c "ssh-add ; $0"
echo "SSH 代理被唤醒"
出口
菲
上面的行将在终端启动时启动期望脚本。
./ssh.exp
这是这个期望脚本的内容
#!/usr/bin/expect
set timeout 20
set passphrase "test"
spawn "./keyadding.sh"
expect "Enter passphrase for /the/path/of/yourkey_id_rsa:"
send "$passphrase\r";
interact
这是我的 keyadding.sh 脚本的内容(您必须将两个脚本都放在您的主文件夹中,通常是 /home/user)
#!/bin/bash
ssh-add /the/path/of/yourkey_id_rsa
exit 0
我强烈建议对 .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/
如果我有时间,肯定会改变我的方法。