每次我通过 ssh 进入服务器时,都需要一遍又一遍地添加相同的 ssh 密钥。所以我有一个脚本可以为我做到这一点,并且在一段时间内运行良好。然而现在服务器抱怨:
- You have too many files are open. Close some files or increase your per-process descriptor limit.
while executing
"spawn bash -c "ssh-add [...some key]""
完整脚本:
#!/usr/bin/expect -f
set key [lindex $argv 0]
set pass [lindex $argv 1]
spawn bash -c "ssh-add /path/to/.ssh/$key"
expect "passphrase"
send "$pass\n"
interact
我对做什么还不够了解spawn
,也不ssh-add
知道该做什么。当我运行时ps -e
,只有 bash 进程。也许这是因为它是共享主机服务器?我想我没有spawn
正确使用。我应该如何解决这个问题并避免以后再出现这个问题?
答案1
首先检查您的打开文件限制:
$ ulimit -n
65536
如果该值太小,只需增加限制即可解决问题。如果限制类似于65536
,那么您的脚本可能正在做一些可疑的事情。
然后检查当前打开了哪些文件:
lsof -u your_username
然后您可以计算一下脚本需要打开多少个文件才能达到限制:
lsof -u your_username | wc -l
顺便提一句。而不是手动添加 ssh 密钥不是更容易使用吗ForwardAgent
?