我正在运行 Debian 7 Wheezy 服务器,在通过 SSH 连接到其他服务器时遇到问题。此问题仅在通过 crontab 运行 SSH 时发生,否则不会发生(当然以同一用户身份登录)。
当我以此用户身份通过 crontab 运行 ssh 命令时,出现以下问题:
Host key verification failed.
我已删除该~/.ssh/known_hosts
文件并手动连接到服务器以确保主机密钥正确。
当使用该-v
标志运行 SSH 时,我得到以下信息:
debug1: read_passphrase: can't open /dev/tty: No such device or address
Host key verification failed.
如果我列出/dev/tty
它有 666 个权限:
crw-rw-rw- 1 root root 5, 0 Jun 21 15:49 /dev/tty
/dev/tty
为了完全确定,我在列出之后还手动将权限设置为 666 。
为什么 SSH 说它无法读取 / dev/tty
?我已经研究了好几个星期,但还没有找到答案。有人知道吗?
答案1
如果没有代理(或者至少没有提供密码的方式),您就无法从脚本使用密码保护的密钥进行连接,ssh 守护进程正在等待您在没有 tty 的情况下无法提供的输入。
答案2
SSH 表示无法读取,/dev/tty
因为您不是从控制台调用它,而是从 crontab 调用它。该/dev/tty
设备是当前进程的控制终端,当您从 crontab 启动进程时,它没有关联的终端,因此它无法访问该设备。
这里有更好的解释:https://stackoverflow.com/questions/8514735/what-is-special-about-dev-tty